Documentation

Games

81 behaviors · std/behaviors

atoms

std-arcade-flow

Headless win/lose authority for the arcade play-for-tickets loop: owns only result. Listens SCORE_CHANGED (tickets + tokens) and sets result to won once tickets reach the target, lost when tokens run out first, else none. Renders nothing.

lolo
1 uses ArcadeFlow from "std/behaviors/std-arcade-flow"

Entity: ArcadeFlowData (runtime)

Traits

Traiteventsemits
ArcadeFlowSCORE_CHANGED, RESTARTGAME_END

Config knobs

TraitKnobTypeLabel
ArcadeFlowrunningbooleanRunning
ArcadeFlowticketsToWinnumberTickets To Win

std-arcade-play

Headless arcade play-economy mechanic: the SOLE writer of tokens + tickets + machines. Applies a PLAY_MACHINE intent (spends a token, rolls a pseudo-random ticket payout within a configured range, emits BURST + SCORE_CHANGED). Renders nothing.

lolo
1 uses ArcadePlay from "std/behaviors/std-arcade-play"

Entity: ArcadePlayData (runtime)

Traits

Traiteventsemits
ArcadePlayPLAY_MACHINE, RESTARTBURST, SCORE_CHANGED

Config knobs

TraitKnobTypeLabel
ArcadePlaymachines[Machine]Machines
ArcadePlaymaxPayoutnumberMax Payout
ArcadePlayminPayoutnumberMin Payout
ArcadePlayrunningbooleanRunning
ArcadePlaystartTokensnumberStart Tokens

std-area-fill

the physical per-tick maximum — so teleports and respawns paint nothing) — height is linear interpolation of the config curve samples above the fill's baseline (the platformer body's leftSamp/rightSamp idiom). rateMode picks the rate: "area" (height × |dx|, default — fills fastest where the curve is tallest), "speed" (|dx| only, flat rate), or "ride" (|dx| only while the move reports skating — walking the same distance paints nothing). When a fill's filled reaches its target it flips reported and emits AREA_FILLED once (the shared entity carries the rest); each fill also stamps a frontier (x0 + span × min(1, filled/target)) so boards can shade the painted region left-to-right as the gauge grows. RESTART resets every live fill (re-arming the live entity set, so SET_FILLS-injected fills survive respawns). SET_FILLS replaces the fill set at runtime for boards that import their fills. Renders nothing; boards shade the painted region and read filled/frontier from the shared entity (the render authority).

lolo
1 uses AreaFill from "std/behaviors/std-area-fill"

Entity: AreaFillData (runtime)

Traits

Traiteventsemits
AreaFillBODY_MOVED, SET_FILLS, RESTARTAREA_FILLED

Config knobs

TraitKnobTypeLabel
AreaFillfills[AreaFill]Fills
AreaFillrunningbooleanRunning

std-audio-cue

swap them per game by rebinding this atom's config, never by hand-authoring a second audio layer.

lolo
1 uses AudioCue from "std/behaviors/std-audio-cue"

Entity: AudioState (runtime)

Traits

Traiteventsemits
AudioCueCUE, MUSIC, STOP_MUSIC, MUTE, UNMUTE, TOGGLE_MUTE, SET_VOLUME, RESTARTAUDIO_MUTED

Config knobs

TraitKnobTypeLabel
AudioCuebaseUrlstringBase Url
AudioCueinitialMusicstringInitial Music
AudioCueinitialMutedbooleanInitial Muted
AudioCueinitialVolumenumberInitial Volume
AudioCuemanifestMap<string,SoundEntry>Manifest

std-camera-rig

a dead-zone camera: inside deadzoneX/deadzoneY the axis holds, outside it lerps by stiffness — clamps the result to bounds, eases camZoom toward camTargetZoom the same way, and decays camShake toward 0 by shakeDecay. Intents: FOLLOW retargets from a moving body's x/y/vx (vx feeds camLead, the horizontal look-ahead), CUT snaps position+target instantly (no ease, for teleports/cutscenes), SET_ZOOM retargets zoom (clamped to minZoom/maxZoom), SHAKE sets camShake for a consumer to jitter with at bind time — this atom never writes shake into camX/camY itself, RESTART reseeds from config. Emits CAMERA_MOVED every tick. Renders nothing — a board binds its own canvas camera prop straight to camX/camY/camZoom.

lolo
1 uses CameraRig from "std/behaviors/std-camera-rig"

Entity: CameraState (runtime)

Traits

Traiteventsemits
CameraRigFOLLOW, CUT, SET_ZOOM, SHAKE, RESTARTCAMERA_MOVED

Config knobs

TraitKnobTypeLabel
CameraRigboundsCameraBoundsBounds
CameraRigdeadzoneXnumberDead Zone X
CameraRigdeadzoneYnumberDead Zone Y
CameraRigleadnumberLead
CameraRigmaxZoomnumberMax Zoom
CameraRigminZoomnumberMin Zoom
CameraRigrunningbooleanRunning
CameraRigshakeDecaynumberShake Decay
CameraRigstartCameraPosStart Position
CameraRigstiffnessnumberStiffness
CameraRigzoomnumberZoom

std-chase-ai

Headless chase-AI mechanic: enemies damage adjacent targets, else step toward the nearest target respecting tile passability and occupancy.

lolo
1 uses ChaseAi from "std/behaviors/std-chase-ai"

Entity: ChaseState (runtime)

Traits

Traiteventsemits
ChaseAinoneBURST, UNITS_CHANGED

Config knobs

TraitKnobTypeLabel
ChaseAigridHeightnumberGrid Height
ChaseAigridWidthnumberGrid Width
ChaseAirunningbooleanRunning
ChaseAitiles[Tile]Initial Tiles
ChaseAiunits[Unit]Initial Units

std-choice-gate

the pad-lock touch pattern): the correct option stamps the gate solved + chosen on the shared entity and emits CHOICE_CORRECT once (a solved gate never judges again, so the path stays open); a wrong option emits CHOICE_WRONG carrying the gate id, the chosen optionId, and the option's world position, so the board can bounce the player back and float the gate's hint (the board owns the bounce — the atom only reports). RESTART unsolves every live gate (re-arming the live entity set, so SET_GATES-injected gates survive respawns). SET_GATES replaces the gate set at runtime for boards that import their gates. Renders nothing; boards draw the option platforms and labels from the shared entity (the render authority). Corresponds to the design-sheet field(s): challenge, agency.

lolo
1 uses ChoiceGate from "std/behaviors/std-choice-gate"

Entity: ChoiceGateData (runtime)

Traits

Traiteventsemits
ChoiceGateBODY_MOVED, SET_GATES, RESTARTCHOICE_CORRECT, CHOICE_WRONG

Config knobs

TraitKnobTypeLabel
ChoiceGategates[ChoiceGate]Choice Gates
ChoiceGatereachXnumberReach X
ChoiceGatereachYnumberReach Y
ChoiceGaterunningbooleanRunning

std-coef-pad

the pad-lock touch pattern), stamps the pad applied on the shared entity and emits COEF_PAD_APPLIED carrying the pad position AND its mod (x0, x1, a, h, k), so the board can append the mod to the body authority's curveMods (std-platformer-body with curveModsEnabled) and hop the player onto the reshaped surface. When every pad is applied it emits COEF_PAD_SET_COMPLETED once. RESTART un-applies every live pad (re-arming the live entity set, so SET_PADS-injected pads survive respawns; the board clears curveMods alongside — the pad reports, the board owns the road). SET_PADS replaces the pad set at runtime for boards that import their pads. Renders nothing; boards draw the pads and read applied from the shared entity (the render authority).

lolo
1 uses CoefPad from "std/behaviors/std-coef-pad"

Entity: CoefPadData (runtime)

Traits

Traiteventsemits
CoefPadLockBODY_MOVED, SET_PADS, RESTARTCOEF_PAD_APPLIED, COEF_PAD_SET_COMPLETED

Config knobs

TraitKnobTypeLabel
CoefPadLockcoefPads[CoefPad]Coefficient Pads
CoefPadLockreachXnumberReach X
CoefPadLockreachYnumberReach Y
CoefPadLockrunningbooleanRunning

std-curve-fog

the atom listens BODY_MOVED and stamps fogX (the reveal horizon = player x + the region's lookAhead) onto the shared entity, and the board's render layer clips or ghosts every road sample past it, so the player must commit to jumps before the landing is visible and internalize where the function GOES (blowup, flattening, slow growth, divergence). Outside every region fogX sits at a large sentinel, i.e. fully revealed. Physics is untouched: the collider keeps the whole curve — the fog is purely visual. Renders nothing; boards clip their own curve/region samples against @entity.fogX (the render authority).

lolo
1 uses CurveFog from "std/behaviors/std-curve-fog"

Entity: CurveFogData (runtime)

Traits

Traiteventsemits
CurveFogBODY_MOVED, RESTARTnone

Config knobs

TraitKnobTypeLabel
CurveFogregions[CurveFogRegion]Fog Regions
CurveFogrunningbooleanRunning

std-dungeon-combat

Headless dungeon combat authority: owns the enemy roster, hero HP, and kill score. Bump-attacks damage enemies; monster ticks chase the hero and deal contact damage.

lolo
1 uses DungeonCombat from "std/behaviors/std-dungeon-combat"

Entity: DungeonCombatData (runtime)

Traits

Traiteventsemits
DungeonCombatATTACK, MONSTER_TICK, RESTARTBURST, DEFEATED

Config knobs

TraitKnobTypeLabel
DungeonCombatattackDamagenumberAttack Damage
DungeonCombatenemies[Unit]Initial Enemies
DungeonCombatgridHeightnumberGrid Height
DungeonCombatgridWidthnumberGrid Width
DungeonCombatpointsPerKillnumberPoints Per Kill
DungeonCombatrunningbooleanRunning
DungeonCombatstartHpnumberStart HP
DungeonCombattiles[Tile]Tiles

std-fx-narrative

Headless pedagogy→fx translator for game boards and learning shells: turns high-level narrative events into big transient screen-space or world-space text effects consumed by std-fx-particles / fx-overlay. Levels emit NARRATE { text, style } and get a correctly styled, centered (or positioned) floating text burst without hand-rolling particle structs. Tutorials emit TUTORIAL_SHOW and the atom forwards SHOW to a composed std-tutorial-overlay trait. Renders nothing; centralizes the FX vocabulary so every level's teaching text looks and behaves the same. Corresponds to the design-sheet field(s): feedback.

lolo
1 uses FxNarrative from "std/behaviors/std-fx-narrative"

Entity: FxNarrativeData (runtime)

Traits

Traiteventsemits
FxNarrativeNARRATE, TUTORIAL_SHOWBURST, SHOW

Config knobs

TraitKnobTypeLabel
FxNarrativerunningbooleanRunning
FxNarrativestylesMap<string,StyleDef>Styles

std-fx-particles

stamping maxTtl (fade envelope) and bornAt (epoch ms, smooth render interpolation) when absent — decays each entry's ttl every tick, drops the dead ones, and clears on RESTART. Name-blind mechanism: the effect-kind vocabulary is consumer-declared (FxPreset tables at the render call sites). Composed onto a [runtime, shared] entity; renders nothing — the board/shell owns the single render authority (draw-fx-layer for space "world", fx-overlay for space "screen"). Corresponds to the design-sheet field(s): feedback, rewards.

lolo
1 uses FxParticles from "std/behaviors/std-fx-particles"

Entity: FxState (runtime)

Traits

Traiteventsemits
FxParticlesBURST, RESTARTnone

Config knobs

TraitKnobTypeLabel
FxParticlesdecayRatenumberDecay Rate
FxParticlesfx[Fx]Initial Fx
FxParticlesrunningbooleanRunning

std-fx-trail

appends a dot only when the body's speed exceeds minSpeed (standing still leaves no trail) and prunes dots older than ttl on the same pass, so no decay tick is needed and a stopped body's trail simply stops growing (the render side fades each dot by bornAt/ttl). RESTART clears. Renders nothing.

lolo
1 uses FxTrail from "std/behaviors/std-fx-trail"

Entity: FxTrailData (runtime)

Traits

Traiteventsemits
FxTrailBODY_MOVED, RESTARTnone

Config knobs

TraitKnobTypeLabel
FxTrailminSpeednumberMin Speed
FxTrailrunningbooleanRunning
FxTrailttlnumberTrail Ttl (ms)

std-gate-lock

stars, coins, keys) and flips every door whose cost is met, stamping open on the shared door rows and emitting GATE_OPENED for the first newly opened door (the shared entity is the render authority for the rest). While a closed door's rect contains the player it emits GATE_BLOCKED once per approach — re-arming only after the player steps out — so the board can answer with a PLACE back and a locked fx. RESTART re-locks every live door and zeroes the total (re-arming the live entity set, so SET_DOORS-injected doors survive respawns). SET_DOORS replaces the door set at runtime for boards that import their doors. Renders nothing; boards draw closed doors as bars/walls and open ones as gaps. Corresponds to the design-sheet field(s): challenge, rewards.

lolo
1 uses GateLock from "std/behaviors/std-gate-lock"

Entity: GateLockData (runtime)

Traits

Traiteventsemits
GateLockCOLLECT, BODY_MOVED, SET_DOORS, RESTARTGATE_OPENED, GATE_BLOCKED

Config knobs

TraitKnobTypeLabel
GateLockdoors[Door]Doors
GateLockreachMarginnumberReach Margin
GateLockrunningbooleanRunning

std-gather

Headless resource-gathering mechanic: owns features + wood + stone. Listens HERO_STEPPED and, when the hero lands on a wood/stone-type feature, increments the matching resource, removes the node, emits a BURST pickup particle, and emits RESOURCES so survival-flow can decide loss. Never writes units.

lolo
1 uses Gather from "std/behaviors/std-gather"

Entity: GatherData (runtime)

Traits

Traiteventsemits
GatherHERO_STEPPED, RESTARTBURST, RESOURCES

Config knobs

TraitKnobTypeLabel
Gatherfeatures[Feature]Features
GatherrunningbooleanRunning
GatherstartStonenumberStart Stone
GatherstartWoodnumberStart Wood
GatherstoneTypestringStone Type
GatherwoodTypestringWood Type
GatheryieldPerNodenumberYield Per Node

std-gold

Headless gold-economy mechanic: the SOLE writer of gold. Listens a mine-hit signal and adds a fixed yield; emits GOLD_CHANGED. Renders nothing.

lolo
1 uses Gold from "std/behaviors/std-gold"

Entity: GoldData (runtime)

Traits

Traiteventsemits
GoldMineMINE_HIT, RESTARTGOLD_CHANGED

Config knobs

TraitKnobTypeLabel
GoldMinerunningbooleanRunning
GoldMinestartGoldnumberStart Gold
GoldMineyieldAmountnumberYield Amount

std-grid-tactics

Headless grid-tactics unit-authority: the SOLE writer of units. Applies MOVE/ATTACK/SPAWN/HEAL intents from any source (player, AI, production, or progression) and runs the enemy AI_TURN pipeline, emitting BURST hit-particles and UNITS_CHANGED survivor counts. Renders nothing.

lolo
1 uses GridTactics from "std/behaviors/std-grid-tactics"

Entity: TacticsState (runtime)

Traits

Traiteventsemits
GridTacticsMOVE, ATTACK, SPAWN, HEAL, AI_TURNBURST, UNITS_CHANGED

Config knobs

TraitKnobTypeLabel
GridTacticsattackDamagenumberAttack Damage
GridTacticsgridHeightnumberGrid Height
GridTacticsgridWidthnumberGrid Width
GridTacticsrunningbooleanRunning
GridTacticstiles[Tile]Tiles
GridTacticsunits[Unit]Initial Units

std-hero-nav

Headless single-hero navigation authority: the SOLE writer of units + movesLeft on objective boards. Applies a budget-limited MOVE intent (steps the hero one tile, spends a move, emits HERO_STEPPED) and an optional WANDER intent (random step for neutral NPCs). Renders nothing.

lolo
1 uses HeroNav from "std/behaviors/std-hero-nav"

Entity: HeroNavData (runtime)

Traits

Traiteventsemits
HeroNavMOVE, WANDER, RESTARTHERO_STEPPED

Config knobs

TraitKnobTypeLabel
HeroNavgridHeightnumberGrid Height
HeroNavgridWidthnumberGrid Width
HeroNavmoveBudgetnumberMove Budget
HeroNavrunningbooleanRunning
HeroNavtiles[Tile]Tiles
HeroNavunits[Unit]Initial Units

std-lives

BODY_HAZARD, BODY_FELL, PATROL_HIT — onto it) costs one life, respecting an invulnerability window so overlapping hazards can't chain-drain; losing a life emits LIFE_LOST plus RESPAWN with the current checkpoint (boards route RESPAWN to the body authority's PLACE), and losing the last emits GAME_OVER instead. Checkpoints advance automatically: BODY_MOVED crossing a configured checkpoint's atX moves the respawn point forward and emits CHECKPOINT_REACHED once per checkpoint (tracked by furthest atX reached, so checkpoints are ordered along the run). RESTART reseeds lives and respawn to the spawn. Renders nothing — HUDs read lives off the shared entity. Corresponds to the design-sheet field(s): challenge, feedback.

lolo
1 uses Lives from "std/behaviors/std-lives"

Entity: LivesData (runtime)

Traits

Traiteventsemits
LivesDAMAGE, BODY_MOVED, RESTARTLIFE_LOST, RESPAWN, GAME_OVER, CHECKPOINT_REACHED

Config knobs

TraitKnobTypeLabel
Livescheckpoints[Checkpoint]Checkpoints
LivesinvulnMsnumberInvulnerability Window (ms)
LivesmaxLivesnumberMax Lives
LivesrunningbooleanRunning
LivesspawnXnumberSpawn X
LivesspawnYnumberSpawn Y

std-loop-lock

either direction counts); when |swept| reaches turns × 2π the lock flips unlocked and emits LOOP_UNLOCKED once. Entering the band reseeds the angle so leaving and returning never jumps the sweep; progress is kept across exits, so a revolution can be completed in stages. RESTART re-locks every live lock (re-arming the live entity set, so SET_LOCKS-injected locks survive respawns). SET_LOCKS replaces the lock set at runtime for boards that import their locks. Renders nothing; boards draw the ring/chest and read swept from the shared entity (the render authority). Corresponds to the design-sheet field(s): challenge, rewards.

lolo
1 uses LoopLock from "std/behaviors/std-loop-lock"

Entity: LoopLockData (runtime)

Traits

Traiteventsemits
LoopLockBODY_MOVED, SET_LOCKS, RESTARTLOOP_UNLOCKED

Config knobs

TraitKnobTypeLabel
LoopLocklocks[LoopLock]Locks
LoopLockrunningbooleanRunning

std-market-flow

Headless win/lose authority for market-service boards: owns only result. Listens SERVICE_CHANGED (served + lost) and sets result to won when enough customers are served, lost when too many patience timers expire, else none. Renders nothing.

lolo
1 uses MarketFlow from "std/behaviors/std-market-flow"

Entity: MarketFlowData (runtime)

Traits

Traiteventsemits
MarketFlowSERVICE_CHANGED, RESTARTGAME_END

Config knobs

TraitKnobTypeLabel
MarketFlowmaxLostnumberMax Lost
MarketFlowrunningbooleanRunning
MarketFlowtargetServednumberTarget Served

std-mesh-asset-art

SOLE writer of @entity.meshAssetArt: collects volumetric asset catalogs published on the bus (MESH_ASSET_PUBLISH { kind, states }) into one kind → (state → draw-group items of draw-mesh descriptors) map that 3D board frames select per-row per anim state. INIT seeds from config and emits MESH_ASSET_SYNC so already-mounted catalogs republish regardless of mount order; the SYNC self-hop re-applies the seed after sibling canvas stashes exist (Almadar_Runtime_Gaps.md R-INIT-SEED-REPAINT-RACE). The 3D twin of SvgAssetArtCollector. Renders nothing — render authority stays with the frame.

lolo
1 uses MeshAssetArt from "std/behaviors/std-mesh-asset-art"

Entity: StdMeshAssetArt (runtime)

Traits

Traiteventsemits
MeshAssetArtCollectorMESH_ASSET_PUBLISHMESH_ASSET_SYNC

Config knobs

TraitKnobTypeLabel
MeshAssetArtCollectorseedArtMap<string,Map<string,[node]>>Seed Art

std-motion-body

thrust acceleration plus the board-wide bias field (biasAx/biasAy — the hill-force / wind / conveyor-belt channel, written only through the SET_BIAS intent) plus gravity feed velocity, damping bleeds it, maxSpeed caps it, velocity steps position, and the world walls clamp it (a clamped axis kills that axis's velocity). Intents: THRUST sets a body's acceleration (hold-to-push input: keydown pushes, keyup zeroes), IMPULSE kicks velocity instantly (jumps, d-pad nudges), PLACE teleports (spawns, curve-riding pins), SET_GRAVITY retunes the pull live, SET_BIAS steers the bias field, RESTART reseeds. Emits BODY_MOVED for the lead body (bodies[0]) every tick so boards that subscribe can react — boards that don't subscribe pay nothing. Renders nothing.

lolo
1 uses MotionBody from "std/behaviors/std-motion-body"

Entity: MotionBodyData (runtime)

Traits

Traiteventsemits
MotionBodyTHRUST, IMPULSE, PLACE, SET_GRAVITY, SET_BIAS, RESTARTBODY_MOVED

Config knobs

TraitKnobTypeLabel
MotionBodybodies[Body]Initial Bodies
MotionBodydampingnumberDamping
MotionBodygravitynumberGravity
MotionBodymaxSpeednumberMax Speed
MotionBodyrunningbooleanRunning
MotionBodyxMaxnumberRight Wall
MotionBodyxMinnumberLeft Wall
MotionBodyyMaxnumberCeiling
MotionBodyyMinnumberFloor

std-objective-flow

Headless win/lose authority for objective boards: owns only result. Listens PROGRESS (objectivesLeft + movesLeft) and sets result to won when every objective is reached, lost when the move budget runs out first, else none. Renders nothing. Corresponds to the design-sheet field(s): goals, feedback.

lolo
1 uses ObjectiveFlow from "std/behaviors/std-objective-flow"

Entity: FlowState (runtime)

Traits

Traiteventsemits
ObjectiveFlowPROGRESS, RESTARTGAME_END

Config knobs

TraitKnobTypeLabel
ObjectiveFlowrunningbooleanRunning

std-objective-reach

Headless reach-the-objective mechanic: owns features + score + objectivesLeft. Listens HERO_STEPPED and, when the hero lands on a target-type feature, scores it (optionally removing the model), emits a BURST pickup particle, and emits PROGRESS so round-flow can decide win/lose. Never writes units.

lolo
1 uses ObjectiveReach from "std/behaviors/std-objective-reach"

Entity: ObjectiveState (runtime)

Traits

Traiteventsemits
ObjectiveReachHERO_STEPPED, RESTARTBURST, PROGRESS

Config knobs

TraitKnobTypeLabel
ObjectiveReachfeatures[Feature]Features
ObjectiveReachpointsPerTargetnumberPoints Per Target
ObjectiveReachreachRadiusnumberReach Radius
ObjectiveReachremoveOnReachbooleanRemove On Reach
ObjectiveReachrunningbooleanRunning
ObjectiveReachstartScorenumberStart Score
ObjectiveReachtargetTypestringTarget Type

std-pad-lock

pads of later groups refuse to light until the current group finishes, so one sum must be finished before the next. When a group completes the trait emits PAD_GROUP_COMPLETED once for it (first newly completed group reports; the shared entity carries the rest); when every pad in the set is lit it stamps completed and emits PAD_SET_COMPLETED once. The lowest uncompleted group is stamped on the shared entity as currentGrp so boards can pulse exactly the live pads (0 = no group open / ungrouped pads). RESTART unlights every live pad and resets the set (re-arming the live entity set, so SET_PADS-injected pads survive respawns). SET_PADS replaces the pad set at runtime for boards that import their pads. Renders nothing; boards draw the pads and read lit from the shared entity (the render authority). Corresponds to the design-sheet field(s): challenge, mechanics.

lolo
1 uses PadLock from "std/behaviors/std-pad-lock"

Entity: PadLockData (runtime)

Traits

Traiteventsemits
PadLockBODY_MOVED, SET_PADS, RESTARTPAD_GROUP_COMPLETED, PAD_SET_COMPLETED

Config knobs

TraitKnobTypeLabel
PadLockpads[PadLock]Pads
PadLockreachXnumberReach X
PadLockreachYnumberReach Y
PadLockrunningbooleanRunning

std-patience

Headless customer-service mechanic: owns a stationary customer roster with per-customer patience. Decrements patience every tick, serves nearby customers on HERO_STEPPED (resets their patience + scores), and emits CUSTOMER_LOST when a timer expires. Never writes units.

lolo
1 uses Patience from "std/behaviors/std-patience"

Entity: PatienceData (runtime)

Traits

Traiteventsemits
PatienceHERO_STEPPED, RESTARTBURST, SERVICE_CHANGED, CUSTOMER_LOST

Config knobs

TraitKnobTypeLabel
Patiencecustomers[Customer]Customers
PatiencerunningbooleanRunning
PatienceserveRadiusnumberServe Radius

std-patrol-hazard

cy = y + waveAmp·sin(2πt/wavePeriod from a per-row time accumulator — and the hit test and render read cy, so a waveAmp of 0 keeps the flat beat), tracks the player position off the body authority's BODY_MOVED, and emits PATROL_HIT once per contact — a per-patrol hit flag re-arms only after the player separates, so damage rules stay sparse (when two patrols connect on the same tick the first reports; the other reports on the next tick). Patrols live on a [runtime, shared] entity for the render layer (boards draw them as markers/sprites); damage, lives, and respawn stay downstream (std-lives) — this atom simulates, it never judges. SET_PATROLS replaces the live patrol set at runtime for boards that import their patrols; RESTART re-arms the live set, so injected patrols survive respawns. Renders nothing. Corresponds to the design-sheet field(s): challenge, dynamics.

lolo
1 uses PatrolHazard from "std/behaviors/std-patrol-hazard"

Entity: PatrolState (runtime)

Traits

Traiteventsemits
PatrolHazardBODY_MOVED, SET_PATROLS, RESTARTPATROL_HIT

Config knobs

TraitKnobTypeLabel
PatrolHazardhitRadiusnumberHit Radius
PatrolHazardpatrols[Patrol]Patrols
PatrolHazardplayerSpawnXnumberPlayer Spawn X
PatrolHazardplayerSpawnYnumberPlayer Spawn Y
PatrolHazardrunningbooleanRunning

std-pickup

the platformer twin of grid std-gather. Listens BODY_MOVED and, when the player touches an uncollected feature (|dx| <= reachX, |dy| <= reachY of the feature center — the coef-pad touch idiom minus the grounded requirement, so airborne pickups work), stamps it collected on the shared entity and emits PICKED once per item (id, kind, position, glyph, message) plus COLLECT{total} with the running count (the event std-gate-lock already consumes). A feature carrying active: false is visible but NOT collectible (gated pickups — e.g. a star that only counts once the curve passes through it); FEATURES_ACTIVE{updates:[{id,active}]} flips gates in place without re-arming collected. When every feature is collected it emits PICKUP_SET_COMPLETED once. RESTART re-arms every feature and zeroes the count (re-arming the live entity set, so SET_FEATURES-injected features survive). SET_FEATURES replaces the collectible set at runtime for boards that import their features; ADD_FEATURES appends without disturbing the live set (mid-game gem drops). kind is board-defined vocabulary (star, boost, …) — this atom reports, boards judge. Renders nothing; boards draw the features and read collected from the shared entity. Corresponds to the design-sheet field(s): rewards.

lolo
1 uses Pickup from "std/behaviors/std-pickup"

Entity: PickupData (runtime)

Traits

Traiteventsemits
PickupBODY_MOVED, SET_FEATURES, ADD_FEATURES, FEATURES_ACTIVE, RESTARTPICKED, COLLECT, PICKUP_SET_COMPLETED

Config knobs

TraitKnobTypeLabel
Pickupfeatures[PickupFeature]Features
PickupreachXnumberReach X
PickupreachYnumberReach Y
PickuprunningbooleanRunning

std-platformer-body

a body moving in the gravity direction that overlaps a ground/platform tile lands on its anti-gravity face (vy zeroed, grounded set), while a body moving against gravity passes through, so jumping up through a platform and walking up a staircase both just work. The sign of gravity IS the vertical convention: positive pulls toward +y (screen boards, y down — sprite canvases), negative toward −y (math canvases, y up); jumps always fire against it. Geometry lives on the shared entity: config platforms/skateCurve/driftRegions seed entity.platforms/skateCurve/driftRegions on INIT, and SET_PLATFORMS / SET_SKATE_CURVE / SET_DRIFT_REGIONS replace them at runtime (RESTART keeps the live set, so boards that import geometry never lose it on a respawn). Intents: STEER sets horizontal velocity (dir −1/0/1 × moveSpeed, hold-to-run: keydown steers, keyup steers 0), JUMP kicks vertical velocity when grounded, PLACE teleports (spawns, hazard respawns), RESTART reseeds. Emits BODY_MOVED every tick for the render layer (boards that don't subscribe pay nothing), plus the sparse rule signals a board needs to score: BODY_JUMPED, BODY_LANDED (with impact speed), BODY_HAZARD (once per hazard entry, re-arms on exit), BODY_GOAL (same arming), BODY_FELL (once per fall past killY, re-armed by PLACE/RESTART). Drift regions: the driftRegions set lists axis-aligned rects each carrying a constant acceleration (ax, ay) applied with the same 0.033s dt whenever the body's center is inside (empty list = zero behavior change). Curve skating: when config.skate is on and the grounded body comes within skateSnap of the skateCurve surface, the body rides the curve — y snaps to the interpolated surface and tangential gravity (g·slope/(1+slope²)) accelerates vx, and the vertical velocity is the tangential projection (s = vx·cos θ, vy = s·sin θ — no discontinuous jumps at sample boundaries), so the body slides downhill along the graph itself and launches ballistically off its ends; jumping kicks free. Sparse BODY_SKATE_START/BODY_SKATE_END signals fire on engage/disengage so boards can layer fx. Lives, score, and win/lose stay downstream — this atom simulates, it never judges. Renders nothing. Corresponds to the design-sheet field(s): mechanics, dynamics.

lolo
1 uses PlatformerBody from "std/behaviors/std-platformer-body"

Entity: PlatformerBodyData (runtime)

Traits

Traiteventsemits
PlatformerBodySTEER, JUMP, PLACE, CURVE_MOD_ADD, CURVE_MOD_CLEAR_RANGE, SET_TUNING, SET_PLATFORMS, SET_SKATE_CURVE, SET_DRIFT_REGIONS, RESTARTBODY_MOVED, BODY_SKATE_START, BODY_SKATE_END, BODY_JUMPED, BODY_LANDED, BODY_HAZARD, BODY_GOAL, BODY_FELL, CURVE_MOD_CLEAR

Config knobs

TraitKnobTypeLabel
PlatformerBodycurveModsEnabledbooleanCurve Mods Enabled
PlatformerBodydriftRegions[BodyDriftRegion]Drift Regions
PlatformerBodygravitynumberGravity
PlatformerBodyjumpStrengthnumberJump Strength
PlatformerBodykillYnumberKill Y
PlatformerBodymaxFallSpeednumberMax Fall Speed
PlatformerBodymoveSpeednumberMove Speed
PlatformerBodyplatforms[PlatformerPlatform]Platforms
PlatformerBodyrunningbooleanRunning
PlatformerBodyskatebooleanCurve Skating
PlatformerBodyskateCurve[PlatformerCurveSample]Skate Curve
PlatformerBodyskateMaxGapnumberSkate Max Gap
PlatformerBodyskateSnapnumberSkate Snap
PlatformerBodyspawnPlatformerBodySpawn Body
PlatformerBodyxMaxnumberRight Wall
PlatformerBodyxMinnumberLeft Wall

std-production

Headless unit-production mechanic: accrues productionPoints each turn (AI_TURN) and, on an affordable PRODUCE, emits a SPAWN intent for the grid-tactics authority to place a new unit. Owns only productionPoints (+ its spawn counter); never writes units directly.

lolo
1 uses Production from "std/behaviors/std-production"

Entity: ProductionState (runtime)

Traits

Traiteventsemits
ProducerAI_TURN, PRODUCESPAWN

Config knobs

TraitKnobTypeLabel
ProducerpointsPerTurnnumberPoints Per Turn
ProducerrunningbooleanRunning
ProducerspawnCostnumberSpawn Cost
ProducerspawnHealthnumberSpawn Health
ProducerspawnTeamstringSpawn Team
ProducerspawnUnitTypestringSpawn Unit Type
ProducerspawnXnumberSpawn X
ProducerspawnYnumberSpawn Y
ProducerstartPointsnumberStart Points

std-round-flow

Headless win/lose round-resolution mechanic: derives result (victory/defeat/none) from team survivor counts on each UNITS_CHANGED signal and emits GAME_END. Owns only result; boards own their own phase/turn. Renders nothing.

lolo
1 uses RoundFlow from "std/behaviors/std-round-flow"

Entity: RoundState (runtime)

Traits

Traiteventsemits
RoundFlowUNITS_CHANGEDGAME_END

Config knobs

TraitKnobTypeLabel
RoundFlowrunningbooleanRunning

std-score

Headless scoring mechanic: awards points when the enemy survivor count drops on a UNITS_CHANGED signal. Owns only score (+ its kill baseline); renders nothing.

lolo
1 uses Score from "std/behaviors/std-score"

Entity: ScoreState (runtime)

Traits

Traiteventsemits
ScoreKeeperUNITS_CHANGEDnone

Config knobs

TraitKnobTypeLabel
ScoreKeeperinitialEnemiesnumberInitial Enemies
ScoreKeeperpointsPerKillnumberPoints Per Kill
ScoreKeeperrunningbooleanRunning
ScoreKeeperstartScorenumberStart Score

std-survival-flow

Headless win/lose authority for the nature-survival board: owns only result. Listens RESOURCES (movesLeft) and sets result to lost when the move budget runs out before the camp is built; listens BUILD_CAMP (the render-gated win intent) and sets result to won. Renders nothing.

lolo
1 uses SurvivalFlow from "std/behaviors/std-survival-flow"

Entity: SurvivalFlowData (runtime)

Traits

Traiteventsemits
SurvivalFlowRESOURCES, BUILD_CAMP, RESTARTGAME_END

Config knobs

TraitKnobTypeLabel
SurvivalFlowrunningbooleanRunning

std-svg-asset-art

SOLE writer of @entity.svgAssetArt: collects vector asset catalogs published on the bus (SVG_ASSET_PUBLISH { kind, states }) into one kind → (state → draw-group items) map that board frames select per-row per anim state. INIT seeds from config and emits SVG_ASSET_SYNC so already-mounted catalogs republish regardless of mount order; the SYNC self-hop re-applies the seed after sibling canvas stashes exist (Almadar_Runtime_Gaps.md R-INIT-SEED-REPAINT-RACE). Renders nothing — render authority stays with the frame.

lolo
1 uses SvgAssetArt from "std/behaviors/std-svg-asset-art"

Entity: StdSvgAssetArt (runtime)

Traits

Traiteventsemits
SvgAssetArtCollectorSVG_ASSET_PUBLISHSVG_ASSET_SYNC

Config knobs

TraitKnobTypeLabel
SvgAssetArtCollectorseedArtMap<string,Map<string,[node]>>Seed Art

std-tutorial-autodemo

the organism maps DEMO_* to its own steering, so a demo cannot self-cancel through the board's input path.

lolo
1 uses TutorialAutodemo from "std/behaviors/std-tutorial-autodemo"

Entity: AutoDemoData (runtime)

Traits

Traiteventsemits
AutoDemoTUTORIAL_DEMO_START, TUTORIAL_DEMO_STOP, DEMO_CANCELDEMO_LEFT, DEMO_RIGHT, DEMO_JUMP, DEMO_STOP

Config knobs

TraitKnobTypeLabel
AutoDemoscripts[DemoScript]Scripts

std-tutorial-overlay

title, a live previewTrait frame playing the mechanic via std-tutorial-autodemo (a bare game canvas, no shell chrome), one line of body copy, a step counter, and Back / Next / Skip — composed entirely from registered render types (stack + text + button + trait frame) into the overlay slot, so no new UI component is needed. autoShow opens it on INIT for first-time players; a board's help button re-opens it any time via SHOW (which rewinds to step one). DISMISS (or finishing the last step) marks the run done, clears the overlay, and emits TUTORIAL_DONE so the board can unpause or log. Steps are pure config — a board teaches a new mechanic by adding one { id, title, body, demoId } row plus a previewTrait binding. Corresponds to the design-sheet field(s): feedback, agency.

lolo
1 uses TutorialOverlay from "std/behaviors/std-tutorial-overlay"

Entity: TutorialState (runtime)

Traits

Traiteventsemits
TutorialEmptyPreviewnonenone
TutorialOverlayCLOSETUT_AUTO, TUT_NEXT, TUT_BACK, TUT_DISMISS, SHOW, TUTORIAL_DONE, TUTORIAL_DEMO_START, TUTORIAL_DEMO_STOP

Config knobs

TraitKnobTypeLabel
TutorialOverlayautoShowbooleanAuto Show
TutorialOverlaypreviewTraittraitPreview trait
TutorialOverlaysteps[TutorialStep]Steps

std-velocity-gate

a failing move resets the hold. The first newly opened gate emits VELOCITY_GATE_OPENED (the shared entity carries the rest). Entering a closed INSTANT gate while NOT passing emits VELOCITY_GATE_DENIED once per approach — re-arming only after the player steps out — so the board can answer with a PLACE back and a hint fx; dwell gates never deny (a hot entry is fine — coming to rest inside is the point), a failed hold simply resets. RESTART re-closes every live gate (re-arming the live entity set, so SET_VGATES-injected gates survive respawns). SET_VGATES replaces the gate set at runtime for boards that import their gates. Renders nothing; boards draw the gate band/chest and read open/held from the shared entity (the render authority). Corresponds to the design-sheet field(s): challenge, mechanics.

lolo
1 uses VelocityGate from "std/behaviors/std-velocity-gate"

Entity: VelocityGateData (runtime)

Traits

Traiteventsemits
VelocityGateBODY_MOVED, SET_VGATES, RESTARTVELOCITY_GATE_OPENED, VELOCITY_GATE_DENIED

Config knobs

TraitKnobTypeLabel
VelocityGategates[VelocityGate]Gates
VelocityGatereachMarginnumberReach Margin
VelocityGaterunningbooleanRunning

std-xp

raising the threshold and emitting a HEAL reward the grid-tactics authority applies. Owns only xp/xpToNext/level (+ kill baseline); never writes units.

lolo
1 uses Xp from "std/behaviors/std-xp"

Entity: XpState (runtime)

Traits

Traiteventsemits
XpProgressionUNITS_CHANGEDHEAL

Config knobs

TraitKnobTypeLabel
XpProgressionbaseXpToNextnumberBase XP To Next
XpProgressionhealTeamstringHeal Team
XpProgressioninitialEnemiesnumberInitial Enemies
XpProgressionlevelUpHealnumberLevel-Up Heal
XpProgressionrunningbooleanRunning
XpProgressionstartXpnumberStart XP
XpProgressionxpPerKillnumberXP Per Kill
XpProgressionxpToNextIncrementnumberXP To Next Increment

std-zone-card

name, concept, objective — for a while after every crossing. Listens BODY_MOVED and, when the player's x crosses into a different config zone, stamps the shared entity (zoneId, card, enteredAt) and emits ZONE_CHANGED carrying the card fields; the card self-clears ttlTicks BODY_MOVED ticks later (a per-move tick counter on the entity, so pauses at speed zero still age it out) and boards clear it early via CARD_DISMISS (renamed to a board-scoped progress event) on any mechanic completion. RESTART clears the card and the clock. Renders nothing; boards draw the card from the shared entity (the render authority).

lolo
1 uses ZoneCard from "std/behaviors/std-zone-card"

Entity: ZoneCardData (runtime)

Traits

Traiteventsemits
ZoneCardBODY_MOVED, CARD_DISMISS, RESTARTZONE_CHANGED

Config knobs

TraitKnobTypeLabel
ZoneCardrunningbooleanRunning
ZoneCardttlTicksnumberTTL Ticks
ZoneCardzones[ZoneCardZone]Zones

organisms

std-arcade-board-3d

3D arcade-hall FRAME: composes hero-nav (free roam) + arcade-play (token/ticket economy) + fx-particles + arcade-flow (win/lose) onto one shared GameState with a single render authority. Games consume this molecule and supply only theme/assets/units/tiles/machines via config.

lolo
1 uses ArcadeBoard3d from "std/behaviors/std-arcade-board-3d"

Entity: GameState (runtime)

Traits

Traiteventsemits
HeroAuthoritynonenone
PlayEconomynonenone
FxDecaynonenone
RoundGatenonenone
ArcadeIntentPLAY_AGAINMOVE, WANDER, PLAY_MACHINE, RESTART, TILE_CLICK, UNIT_CLICK, FEATURE_CLICK, CANCEL

Config knobs

TraitKnobTypeLabel
HeroAuthoritygridHeightnumberGrid Height
HeroAuthoritygridWidthnumberGrid Width
HeroAuthoritymoveBudgetnumberMove Budget
HeroAuthorityrunningbooleanRunning
HeroAuthoritytiles[Tile]Tiles
HeroAuthorityunits[Unit]Initial Units
PlayEconomymachines[Machine]Machines
PlayEconomymaxPayoutnumberMax Payout
PlayEconomyminPayoutnumberMin Payout
PlayEconomyrunningbooleanRunning
PlayEconomystartTokensnumberStart Tokens
FxDecaydecayRatenumberDecay Rate
FxDecayfx[Fx]Initial Fx
FxDecayrunningbooleanRunning
RoundGaterunningbooleanRunning
RoundGateticketsToWinnumberTickets To Win
ArcadeIntentassetManifestAssetManifestAsset Manifest
ArcadeIntentbgColorstringBg Color
ArcadeIntentcameraModestringCamera Mode
ArcadeIntentfeatures[Feature]Features
ArcadeIntentfxPresets[FxPreset]Fx Presets
ArcadeIntentgoalTextstringGoal Text
ArcadeIntentgridHeightnumberGrid Height
ArcadeIntentgridWidthnumberGrid Width
ArcadeIntenthowTextstringHow Text
ArcadeIntentmovementRangenumberMovement Range
ArcadeIntentscalenumberScale
ArcadeIntentticketsLabelstringTickets Label
ArcadeIntenttokensLabelstringTokens Label
ArcadeIntentunitScalenumberUnit Scale

std-crew-board-2d

2D multi-unit crew-management board FRAME: composes hero-nav (unit-by-id move authority, no combat) + fx-particles onto one shared GameState with a canvas-2d render and select/deselect/move intent. Games consume this molecule and supply only theme/assets/units/tiles via config.

lolo
1 uses CrewBoard2d from "std/behaviors/std-crew-board-2d"

Entity: GameState (runtime)

Traits

Traiteventsemits
CrewAuthoritynonenone
FxDecaynonenone
AnimClocknonenone
CrewIntentnoneMOVE, TILE_CLICK, UNIT_CLICK, CANCEL

Config knobs

TraitKnobTypeLabel
CrewAuthoritygridHeightnumberGrid Height
CrewAuthoritygridWidthnumberGrid Width
CrewAuthoritymoveBudgetnumberMove Budget
CrewAuthorityrunningbooleanRunning
CrewAuthoritytiles[Tile]Tiles
CrewAuthorityunits[Unit]Initial Units
FxDecaydecayRatenumberDecay Rate
FxDecayfx[Fx]Initial Fx
FxDecayrunningbooleanRunning
AnimClockframes[string]Frame names
CrewIntentassetManifestAssetManifestAsset Manifest
CrewIntentbackgroundAssetAssetBackground Asset
CrewIntentcancelIconAssetCancel Icon
CrewIntentcrewCountnumberCrew Count
CrewIntentcrewIconAssetCrew Icon
CrewIntentfeatures[Feature]Features
CrewIntentfxPresets[FxPreset]Fx Presets
CrewIntentgridHeightnumberGrid Height
CrewIntentgridWidthnumberGrid Width
CrewIntenthudBackgroundAssetAssetHUD Background Asset
CrewIntentmovementRangenumberMovement Range
CrewIntentoxygennumberOxygen
CrewIntentoxygenIconAssetOxygen Icon
CrewIntentprojectionstringProjection
CrewIntentshowMinimapbooleanShow Minimap

std-dungeon-board-2d

2D key-move dungeon-crawl board FRAME: composes hero-nav (key-move intent) + dungeon-combat (bump-attack, monster chase, hero HP) + objective-reach (exit/chest) + fx-particles + objective-flow (win) onto one shared GameState with a canvas-2d render. Games consume this molecule and supply only theme/assets/tiles/units/enemies/features via config.

lolo
1 uses DungeonBoard2d from "std/behaviors/std-dungeon-board-2d"

Entity: GameState (runtime)

Traits

Traiteventsemits
HeroAuthoritynonenone
Enemiesnonenone
Collectornonenone
FxDecaynonenone
RoundGatenonenone
DungeonIntentnoneMOVE, ATTACK, MONSTER_TICK, MOVE_UP, MOVE_DOWN, MOVE_LEFT, MOVE_RIGHT, PLAY_AGAIN, RESTART

Config knobs

TraitKnobTypeLabel
HeroAuthoritygridHeightnumberGrid Height
HeroAuthoritygridWidthnumberGrid Width
HeroAuthoritymoveBudgetnumberMove Budget
HeroAuthorityrunningbooleanRunning
HeroAuthoritytiles[Tile]Tiles
HeroAuthorityunits[Unit]Initial Units
EnemiesattackDamagenumberAttack Damage
Enemiesenemies[Unit]Initial Enemies
EnemiesgridHeightnumberGrid Height
EnemiesgridWidthnumberGrid Width
EnemiespointsPerKillnumberPoints Per Kill
EnemiesrunningbooleanRunning
EnemiesstartHpnumberStart HP
Enemiestiles[Tile]Tiles
Collectorfeatures[Feature]Features
CollectorpointsPerTargetnumberPoints Per Target
CollectorreachRadiusnumberReach Radius
CollectorremoveOnReachbooleanRemove On Reach
CollectorrunningbooleanRunning
CollectorstartScorenumberStart Score
CollectortargetTypestringTarget Type
FxDecaydecayRatenumberDecay Rate
FxDecayfx[Fx]Initial Fx
FxDecayrunningbooleanRunning
RoundGaterunningbooleanRunning
DungeonIntentassetManifestAssetManifestAsset Manifest
DungeonIntentbackgroundAssetAssetBackground Asset
DungeonIntentdirectionAssetsDirectionAssetsDirection Assets
DungeonIntentfontFamilystringFont Family
DungeonIntentfxPresets[FxPreset]Fx Presets
DungeonIntentgridHeightnumberGrid Height
DungeonIntentgridWidthnumberGrid Width
DungeonIntenthudBackgroundAssetAssetHUD Background Asset
DungeonIntentscalenumberScale

std-market-board-3d

3D single-hero market-service board FRAME: composes hero-nav (hero movement) + patience (stationary customers + starve timers) + fx-particles + market-flow (win/lose) onto one shared GameState with a single render authority. Games consume this molecule and supply only theme/assets/units/customers via config.

lolo
1 uses MarketBoard3d from "std/behaviors/std-market-board-3d"

Entity: GameState (runtime)

Traits

Traiteventsemits
HeroAuthoritynonenone
Patiencenonenone
FxDecaynonenone
RoundGatenonenone
MarketIntentPLAY_AGAINMOVE, RESTART, TILE_CLICK, UNIT_CLICK, CANCEL

Config knobs

TraitKnobTypeLabel
HeroAuthoritygridHeightnumberGrid Height
HeroAuthoritygridWidthnumberGrid Width
HeroAuthoritymoveBudgetnumberMove Budget
HeroAuthorityrunningbooleanRunning
HeroAuthoritytiles[Tile]Tiles
HeroAuthorityunits[Unit]Initial Units
Patiencecustomers[Customer]Customers
PatiencerunningbooleanRunning
PatienceserveRadiusnumberServe Radius
FxDecaydecayRatenumberDecay Rate
FxDecayfx[Fx]Initial Fx
FxDecayrunningbooleanRunning
RoundGatemaxLostnumberMax Lost
RoundGaterunningbooleanRunning
RoundGatetargetServednumberTarget Served
MarketIntentassetManifestAssetManifestAsset Manifest
MarketIntentbgColorstringBg Color
MarketIntentcameraModestringCamera Mode
MarketIntentfeatures[Feature]Features
MarketIntentfxPresets[FxPreset]Fx Presets
MarketIntentgoalTextstringGoal Text
MarketIntentgridHeightnumberGrid Height
MarketIntentgridWidthnumberGrid Width
MarketIntenthowTextstringHow Text
MarketIntentlivesLabelstringLives Label
MarketIntentmaxLostnumberMax Lost
MarketIntentmovementRangenumberMovement Range
MarketIntentscalenumberScale
MarketIntentscoreLabelstringScore Label
MarketIntentunitScalenumberUnit Scale

std-objective-board-3d

3D single-hero objective board FRAME: composes hero-nav (units + move budget) + objective-reach (targets) + fx-particles + objective-flow (win/lose) onto one shared GameState with a single render authority. Games consume this molecule and supply only theme/assets/units/targets via config.

lolo
1 uses ObjectiveBoard3d from "std/behaviors/std-objective-board-3d"

Entity: GameState (runtime)

Traits

Traiteventsemits
HeroAuthoritynonenone
Collectornonenone
FxDecaynonenone
RoundGatenonenone
HeroIntentPLAY_AGAINMOVE, WANDER, RESTART, TILE_CLICK, UNIT_CLICK, CANCEL

Config knobs

TraitKnobTypeLabel
HeroAuthoritygridHeightnumberGrid Height
HeroAuthoritygridWidthnumberGrid Width
HeroAuthoritymoveBudgetnumberMove Budget
HeroAuthorityrunningbooleanRunning
HeroAuthoritytiles[Tile]Tiles
HeroAuthorityunits[Unit]Initial Units
Collectorfeatures[Feature]Features
CollectorpointsPerTargetnumberPoints Per Target
CollectorreachRadiusnumberReach Radius
CollectorremoveOnReachbooleanRemove On Reach
CollectorrunningbooleanRunning
CollectorstartScorenumberStart Score
CollectortargetTypestringTarget Type
FxDecaydecayRatenumberDecay Rate
FxDecayfx[Fx]Initial Fx
FxDecayrunningbooleanRunning
RoundGaterunningbooleanRunning
HeroIntentassetManifestAssetManifestAsset Manifest
HeroIntentbgColorstringBg Color
HeroIntentcameraModestringCamera Mode
HeroIntentextraStats[HudStat]Extra Stats
HeroIntentfxPresets[FxPreset]Fx Presets
HeroIntentgridHeightnumberGrid Height
HeroIntentgridWidthnumberGrid Width
HeroIntentmovementRangenumberMovement Range
HeroIntentobjectiveLabelstringObjective Label
HeroIntentscalenumberScale
HeroIntentscoreLabelstringScore Label
HeroIntentunitScalenumberUnit Scale

std-platformer-board-2d

input forwarding (LEFT/RIGHT/STOP/JUMP → STEER/JUMP intents), goal scoring, hazard/pit lives with respawn, PLAY_AGAIN reset — physics, particles, and the win gate belong to the atoms. Games consume this organism and supply level geometry (platforms, in both BodyAuthority.platforms for collision and the render-side platforms knob), theme/assets, and physics feel via config/traitOverrides.

lolo
1 uses PlatformerBoard2d from "std/behaviors/std-platformer-board-2d"

Entity: GameState (runtime)

Traits

Traiteventsemits
BodyAuthoritynonenone
FxDecaynonenone
RoundGatenonenone
PlatformerIntentnoneLEFT, RIGHT, STOP, JUMP, PLAT_STEER, PLAT_JUMP, PLAT_PLACE, PLAT_GOAL, PLAT_HAZARD, PLAT_FELL, BURST, PROGRESS, GAME_END, RESTART, PLAY_AGAIN

Config knobs

TraitKnobTypeLabel
BodyAuthoritycurveModsEnabledbooleanCurve Mods Enabled
BodyAuthoritydriftRegions[BodyDriftRegion]Drift Regions
BodyAuthoritygravitynumberGravity
BodyAuthorityjumpStrengthnumberJump Strength
BodyAuthoritykillYnumberKill Y
BodyAuthoritymaxFallSpeednumberMax Fall Speed
BodyAuthoritymoveSpeednumberMove Speed
BodyAuthorityplatforms[PlatformerPlatform]Platforms
BodyAuthorityrunningbooleanRunning
BodyAuthorityskatebooleanCurve Skating
BodyAuthorityskateCurve[PlatformerCurveSample]Skate Curve
BodyAuthorityskateMaxGapnumberSkate Max Gap
BodyAuthorityskateSnapnumberSkate Snap
BodyAuthorityspawnPlatformerBodySpawn Body
BodyAuthorityxMaxnumberRight Wall
BodyAuthorityxMinnumberLeft Wall
FxDecaydecayRatenumberDecay Rate
FxDecayfx[Fx]Initial Fx
FxDecayrunningbooleanRunning
RoundGaterunningbooleanRunning
PlatformerIntentbackgroundAssetAssetBackground Asset
PlatformerIntentbackgroundImageAssetBackground Image
PlatformerIntentbgColorstringBg Color
PlatformerIntentclearTitlestringClear Title
PlatformerIntentdirectionAssetsDirectionAssetsDirection Assets
PlatformerIntentfxPresets[FxPreset]Fx Presets
PlatformerIntentgoalScorenumberGoal Score
PlatformerIntenthudBackgroundAssetAssetHUD Background Asset
PlatformerIntentlostTitlestringLost Title
PlatformerIntentplatforms[PlatformerPlatform]Platforms
PlatformerIntentplayerSpriteAssetPlayer Sprite
PlatformerIntentrespawnXnumberRespawn X
PlatformerIntentrespawnYnumberRespawn Y
PlatformerIntentstartLivesnumberStart Lives
PlatformerIntenttileSpritesMap<string,Asset>Tile Sprites
PlatformerIntentworldHeightnumberWorld Height
PlatformerIntentworldWidthnumberWorld Width

std-platformer-puzzle

platformer-body, pickup, objective-flow, choice-gate, fx-particles, fx-narrative, tutorial-overlay — as the pillars a level rebinds: agency (body), challenge (choice), goal (objective), reward (pickup), feedback (fx, narrative, tutorial). Levels rebind these authorities locally and add their own geometry, render, and math rules. Math targets and grade levels stay downstream in the domain package; this substrate is domain-agnostic.

lolo
1 uses PlatformerPuzzle from "std/behaviors/std-platformer-puzzle"

Entity: PlatformerPuzzleData (runtime)

Traits

Traiteventsemits
PlatformerPuzzleBodynonenone
PlatformerPuzzlePickupnonenone
PlatformerPuzzleObjectivenonenone
PlatformerPuzzleChoicenonenone
PlatformerPuzzleFxnonenone
PlatformerPuzzleNarrativenonenone
PlatformerPuzzleTutorialnonenone
PlatformerPuzzleNoopPreviewnonenone

Config knobs

TraitKnobTypeLabel
PlatformerPuzzleBodycurveModsEnabledbooleanCurve Mods Enabled
PlatformerPuzzleBodydriftRegions[BodyDriftRegion]Drift Regions
PlatformerPuzzleBodygravitynumberGravity
PlatformerPuzzleBodyjumpStrengthnumberJump Strength
PlatformerPuzzleBodykillYnumberKill Y
PlatformerPuzzleBodymaxFallSpeednumberMax Fall Speed
PlatformerPuzzleBodymoveSpeednumberMove Speed
PlatformerPuzzleBodyplatforms[PlatformerPlatform]Platforms
PlatformerPuzzleBodyrunningbooleanRunning
PlatformerPuzzleBodyskatebooleanCurve Skating
PlatformerPuzzleBodyskateCurve[PlatformerCurveSample]Skate Curve
PlatformerPuzzleBodyskateMaxGapnumberSkate Max Gap
PlatformerPuzzleBodyskateSnapnumberSkate Snap
PlatformerPuzzleBodyspawnPlatformerBodySpawn Body
PlatformerPuzzleBodyxMaxnumberRight Wall
PlatformerPuzzleBodyxMinnumberLeft Wall
PlatformerPuzzlePickupfeatures[PickupFeature]Features
PlatformerPuzzlePickupreachXnumberReach X
PlatformerPuzzlePickupreachYnumberReach Y
PlatformerPuzzlePickuprunningbooleanRunning
PlatformerPuzzleObjectiverunningbooleanRunning
PlatformerPuzzleChoicegates[ChoiceGate]Choice Gates
PlatformerPuzzleChoicereachXnumberReach X
PlatformerPuzzleChoicereachYnumberReach Y
PlatformerPuzzleChoicerunningbooleanRunning
PlatformerPuzzleFxdecayRatenumberDecay Rate
PlatformerPuzzleFxfx[Fx]Initial Fx
PlatformerPuzzleFxrunningbooleanRunning
PlatformerPuzzleNarrativerunningbooleanRunning
PlatformerPuzzleNarrativestylesMap<string,StyleDef>Styles
PlatformerPuzzleTutorialautoShowbooleanAuto Show
PlatformerPuzzleTutorialpreviewTraittraitPreview trait
PlatformerPuzzleTutorialsteps[TutorialStep]Steps

std-survival-board-3d

3D single-hero survival board FRAME: composes hero-nav (units + move budget as energy) + gather (wood/stone resource nodes) + fx-particles + survival-flow (build-camp win / energy-out loss) onto one shared GameState with a single render authority. Games consume this molecule and supply only theme/assets/units/tiles/features/camp thresholds via config.

lolo
1 uses SurvivalBoard3d from "std/behaviors/std-survival-board-3d"

Entity: GameState (runtime)

Traits

Traiteventsemits
HeroAuthoritynonenone
Gathernonenone
FxDecaynonenone
Flownonenone
SurvivalIntentPLAY_AGAINMOVE, WANDER, RESTART, TILE_CLICK, UNIT_CLICK, CANCEL, BUILD_CAMP_PRESS, BUILD_CAMP

Config knobs

TraitKnobTypeLabel
HeroAuthoritygridHeightnumberGrid Height
HeroAuthoritygridWidthnumberGrid Width
HeroAuthoritymoveBudgetnumberMove Budget
HeroAuthorityrunningbooleanRunning
HeroAuthoritytiles[Tile]Tiles
HeroAuthorityunits[Unit]Initial Units
Gatherfeatures[Feature]Features
GatherrunningbooleanRunning
GatherstartStonenumberStart Stone
GatherstartWoodnumberStart Wood
GatherstoneTypestringStone Type
GatherwoodTypestringWood Type
GatheryieldPerNodenumberYield Per Node
FxDecaydecayRatenumberDecay Rate
FxDecayfx[Fx]Initial Fx
FxDecayrunningbooleanRunning
FlowrunningbooleanRunning
SurvivalIntentassetManifestAssetManifestAsset Manifest
SurvivalIntentbgColorstringBg Color
SurvivalIntentcameraModestringCamera Mode
SurvivalIntentcampStonenumberCamp Stone
SurvivalIntentcampWoodnumberCamp Wood
SurvivalIntentextraStats[HudStat]Extra Stats
SurvivalIntentfxPresets[FxPreset]Fx Presets
SurvivalIntentgridHeightnumberGrid Height
SurvivalIntentgridWidthnumberGrid Width
SurvivalIntentmovementRangenumberMovement Range
SurvivalIntentscalenumberScale
SurvivalIntentunitScalenumberUnit Scale

std-tactics-board-2d

2D player-controlled grid-tactics board FRAME: composes grid-tactics (units authority) + fx-particles + round-flow + a player-intent/render trait onto one shared GameState with a canvas-2d render. Games consume this molecule and supply only theme/assets/units via config.

lolo
1 uses TacticsBoard2d from "std/behaviors/std-tactics-board-2d"

Entity: GameState (runtime)

Traits

Traiteventsemits
TacticsAuthoritynonenone
FxDecaynonenone
RoundLogicnonenone
ScoreKeepernonenone
AnimClocknonenone
VectorArtnonenone
PlayerIntentEND_TURNMOVE, ATTACK, AI_TURN, TILE_CLICK, UNIT_CLICK, CANCEL, ``

Config knobs

TraitKnobTypeLabel
TacticsAuthorityattackDamagenumberAttack Damage
TacticsAuthoritygridHeightnumberGrid Height
TacticsAuthoritygridWidthnumberGrid Width
TacticsAuthorityrunningbooleanRunning
TacticsAuthoritytiles[Tile]Tiles
TacticsAuthorityunits[Unit]Initial Units
FxDecaydecayRatenumberDecay Rate
FxDecayfx[Fx]Initial Fx
FxDecayrunningbooleanRunning
RoundLogicrunningbooleanRunning
ScoreKeeperinitialEnemiesnumberInitial Enemies
ScoreKeeperpointsPerKillnumberPoints Per Kill
ScoreKeeperrunningbooleanRunning
ScoreKeeperstartScorenumberStart Score
AnimClockframes[string]Frame names
VectorArtseedArtMap<string,Map<string,[node]>>Seed Art
PlayerIntentassetManifestAssetManifestAsset Manifest
PlayerIntentattackRangenumberAttack Range
PlayerIntentbackgroundAssetAssetBackground Asset
PlayerIntentextraAddonEventeventExtra Addon Event
PlayerIntentextraAddons[HudButton]Extra Addon Buttons
PlayerIntentextraStats[HudStat]Extra HUD Stats
PlayerIntentfeatures[Feature]Features
PlayerIntentfxPresets[FxPreset]Fx Presets
PlayerIntentgridHeightnumberGrid Height
PlayerIntentgridWidthnumberGrid Width
PlayerIntenthudBackgroundAssetAssetHUD Background Asset
PlayerIntentmovementRangenumberMovement Range
PlayerIntentprojectionstringProjection
PlayerIntentshowMinimapbooleanShow Minimap
PlayerIntentvectorUnitScalenumberVector Unit Scale

std-tactics-board-3d

3D player-controlled grid-tactics board FRAME: composes grid-tactics (units authority) + fx-particles + round-flow + a player-intent/render trait onto one shared GameState. Games consume this molecule and supply only theme/assets/units via config.

lolo
1 uses TacticsBoard3d from "std/behaviors/std-tactics-board-3d"

Entity: GameState (runtime)

Traits

Traiteventsemits
TacticsAuthoritynonenone
FxDecaynonenone
RoundLogicnonenone
VolumetricArtnonenone
PlayerIntentEND_TURNMOVE, ATTACK, AI_TURN, TILE_CLICK, UNIT_CLICK, CANCEL

Config knobs

TraitKnobTypeLabel
TacticsAuthorityattackDamagenumberAttack Damage
TacticsAuthoritygridHeightnumberGrid Height
TacticsAuthoritygridWidthnumberGrid Width
TacticsAuthorityrunningbooleanRunning
TacticsAuthoritytiles[Tile]Tiles
TacticsAuthorityunits[Unit]Initial Units
FxDecaydecayRatenumberDecay Rate
FxDecayfx[Fx]Initial Fx
FxDecayrunningbooleanRunning
RoundLogicrunningbooleanRunning
VolumetricArtseedArtMap<string,Map<string,[node]>>Seed Art
PlayerIntentassetManifestAssetManifestAsset Manifest
PlayerIntentbgColorstringBg Color
PlayerIntentcameraModestringCamera Mode
PlayerIntentfeatures[Feature]Features
PlayerIntentfxPresets[FxPreset]Fx Presets
PlayerIntentgridHeightnumberGrid Height
PlayerIntentgridWidthnumberGrid Width
PlayerIntentlightingLighting3DLighting
PlayerIntentmeshUnitScalenumberMesh Unit Scale
PlayerIntentmovementRangenumberMovement Range
PlayerIntentpostPost3DPost Effects
PlayerIntentscalenumberScale
PlayerIntentunitScalenumberUnit Scale

std-worldmap-board-2d

2D isometric overworld-travel board FRAME: composes grid-tactics (units authority) + round-flow (win/lose) + gold + a player-intent/render trait onto one shared GameState with an isometric canvas-2d render. Games consume this molecule and supply theme/assets/units/tiles/features via config.

lolo
1 uses WorldmapBoard2d from "std/behaviors/std-worldmap-board-2d"

Entity: GameState (runtime)

Traits

Traiteventsemits
TacticsAuthoritynonenone
RoundLogicnonenone
GoldAuthoritynonenone
WorldMapIntentnoneHERO_SELECT, HERO_MOVE, ADVANCE_TURN, MOVE, ATTACK, MINE_HIT

Config knobs

TraitKnobTypeLabel
TacticsAuthorityattackDamagenumberAttack Damage
TacticsAuthoritygridHeightnumberGrid Height
TacticsAuthoritygridWidthnumberGrid Width
TacticsAuthorityrunningbooleanRunning
TacticsAuthoritytiles[Tile]Tiles
TacticsAuthorityunits[Unit]Initial Units
RoundLogicrunningbooleanRunning
GoldAuthorityrunningbooleanRunning
GoldAuthoritystartGoldnumberStart Gold
GoldAuthorityyieldAmountnumberYield Amount
WorldMapIntentassetManifestAssetManifestAsset Manifest
WorldMapIntentbackgroundAssetAssetBackground Asset
WorldMapIntentextraAddons[HudButton]Extra Addon Buttons
WorldMapIntentextraStats[HudStat]Extra HUD Stats
WorldMapIntentfeatures[Feature]Features
WorldMapIntentfontFamilystringFont Family
WorldMapIntentgoldIconAssetAssetGold Icon Asset
WorldMapIntentgridHeightnumberGrid Height
WorldMapIntentgridWidthnumberGrid Width
WorldMapIntenthudBackgroundAssetAssetHUD Background Asset
WorldMapIntentmovementRangenumberMovement Range
WorldMapIntentregionstringRegion
WorldMapIntentregionIconAssetAssetRegion Icon Asset
WorldMapIntenttravelIconAssetAssetTravel Icon Asset
WorldMapIntentturnIconAssetAssetTurn Icon Asset

Pattern factories

One ui-* behavior per UI pattern, generated 1:1 from the pattern registry: its config knobs are the pattern's props.

NameDescription
ui-action-paletteActionPalette
ui-action-tileActionTile
ui-canvas-2dCanvas2d
ui-canvasCanvas
ui-choice-buttonChoiceButton
ui-control-buttonControlButton
ui-control-gridControlGrid
ui-dialogue-bubbleDialogueBubble
ui-draw-fx-layerDrawFxLayer
ui-draw-groupDrawGroup
ui-draw-meshDrawMesh
ui-draw-shape-layerDrawShapeLayer
ui-draw-shapeDrawShape
ui-draw-skinned-meshDrawSkinnedMesh
ui-draw-sprite-layerDrawSpriteLayer
ui-draw-spriteDrawSprite
ui-draw-text-layerDrawTextLayer
ui-draw-textDrawText
ui-game-audio-cueGameAudioCue
ui-game-audio-toggleGameAudioToggle
ui-game-hudGameHud
ui-game-menuGameMenu
ui-health-barHealthBar
ui-score-displayScoreDisplay
ui-sequence-barSequenceBar
ui-stat-badgeStatBadge
ui-state-graphStateGraph
ui-state-json-viewStateJsonView
ui-timer-displayTimerDisplay
ui-trait-slotTraitSlot
Orb

The language where the rule is the program.

© 2026 Almadar. Ljubljana, Slovenia.