AetherLife · for Echoes Online

Little lives,
big brains

A friendly, LLM-ready sim layer. Objects say what they can do, characters carry things, look where you point, and can even fail — and a swappable "mind" decides, scripted today, a language model tomorrow. Meet CATAPHRACT.

smart objectscompanion + podcommand consoleskill checksEchoes Online
scroll
advertise
smart objects
12+
verb API
STR·LUCK
skill checks
snap
placement grid
The motive loop

How a day unfolds

Needs decay, the character tends the most urgent, the need refills, and on to the next — all discovered from what objects advertise. The exact same objects answer typed commands.

need decays
pick urgent
interact
refill

Objects that advertise

The Sims "smart object" pattern: a fridge offers eat, a bed sleep, a cup grab. Characters discover what's possible — no per-object code.

Verbs like pull, clean, serve and watch tv are just more rows on the object; each row (an InteractionOffer) carries its animation, duration, reach, the need it refills, and any flags.

Fridge
  eat → hunger +0.50/s   serve → luck check
Bed
  sleep → sleep +0.40/s   pull → strength check
Cup
  grab → carry it   clean → tidy

A body you can talk to

Everything a director wants runs through one small verb API — exactly what a language model would call. Gaze and locomotion are separate channels, so she can look at you while walking to the couch.

GoToInteractGrab PlaceHeldOnPlaceHeldAtPushTo Approach / FollowLookAtLookAtNeutral MoveAwayFromSayWaitInterrupt

Needs that make it alive

Sleep, hunger, entertainment decay over time. In the sim_house demo one character autonomously cycles fridge → couch → bed, tending whichever is lowest — the same objects the command layer uses, driven instead by a utility brain.

sleep
19%
hunger
96%
fun
64%

Actions that can fail

An offer can carry an attribute check. Threshold gates on a stat — drag a bed only if you're strong enough. Chance rolls the dice, tilted by luck — carry food across the room without dropping it.

Fail and nothing happens: she says so, and the world hears an ActionFailed signal it can react to.

pull bed — STR 0.40 < 0.70 → fail "won't budge"
pull couch — STR 0.40 > 0.30 → ok
serve food — LUCK roll ×2 → maybe
grab jug — too wide for the grip → no hold

Pick it up, set it down

A successful grab lifts the object into her hand and it rides along as she walks. A full cup is kept upright so it won't spill; an empty one she carries any old way. Too big to grip and the grab fails.

Her arms hang relaxed at her sides until she reaches — the reach IK is layered on top of the locomotion pose, so it starts natural and returns natural.

grab → hand full → upright empty → any jug → too big set on <surface>

Looks — for real

"Look at the couch" doesn't just crank her neck. Her head keeps a comfort cone; past it the body eases around to meet the target — and while seated or laying she re-poses more gently.

Look neutral settles her gaze back forward and lets the body relax to its resting facing.

head stays within ±45°
body assists the rest — comfortable
posture stand / sit / lay → scaled turn
neutral → ease back to forward
Exact placement

The placement grid

She can put things down precisely — and the grid appears as a helper so you can see exactly where.

A grid that appears to help

Ask, and a snap grid lights up on the floor: cell lines, a marker at every object's center point, and the target cell highlighted. Say "grid finer" / "coarser" to change density for fine placement.

show grid center points snap to cell grid finer / coarser grid density 0.25

Push it exactly there — respecting collisions

"Move the couch to the bed", "push the fridge to the middle", or explicit coordinates "push the couch to 2 3" (x z) — even "2 1 3" (x y z). She walks behind the object and slides it onto the snapped cell.

Pushing checks footprints: she won't shove one object through another, and stops with "something's in the way." A step-up assist lets her climb stairs to a second floor when the nav mesh routes her there.

push couch to bed → snap nearest free cell
to 2 3 → x,z on the grid
footprint overlaps → stop
step-up ≤ 0.3m → climbs stairs

Sub-grids on objects

Objects can carry their own little grids — the levels of a shelf, the zones of a desk. Address a slot by area and cell: "place at shelf, area 3, 2 1" puts the carried item on the third shelf, column 2, row 1.

Shelf
  area 1 — 4×1 cells  (bottom)
  area 2 — 4×1 cells
  area 3 — 4×1 cells  (top)
place at shelf area 3 2 1
The command console

One box, three voices

Pick who you're addressing from a dropdown, type, and only the right character listens — the sim character you command, the companion CATAPHRACT, or the floating POD that shadows her.

Say who's talking

The console tags every line with a speaker and fires Submitted(speaker, text). Each brain picks up only its own lines, so telling CATAPHRACT to go "defensive" never makes the sim character try to interpret it — the old cross-talk that broke stances and the help action is gone.

The same box drives all three. Change the dropdown, keep typing.

[ Cataphract ▾ ] defensive
→ companion holds a guarded stance
[ Pod ▾ ] listen to cataphract
→ "Pod Unit listening to Cataphract."
offensive defensive support passive / stand down

Broadcast → help → finish

Coordination is a tiny three-step handshake anyone can join. CATAPHRACT broadcasts a task onto a shared bus; the POD (or anyone) answers with help and attends to the requester; when it's handled the request clears and the initiator finishes the action.

1

Broadcast

broadcast eat fridge — CATAPHRACT posts a help request (15s) to the log.

2

Say help

help from the POD — it shadows the requester and logs "listening to Cataphract".

3

Finish

The request clears from the bus and the initiator completes the action.

From words to motion — the seam

A line flows CommandConsole → (CommandBrain | CompanionBrain) → verbs. The console only tags who is speaking; each brain turns its own lines into verb calls or stance changes, reading the scene from that character's own vantage — bearings, distances, only the verbs actually available, never god-mode. Swap a brain for a language model and nothing else moves: the bodies, objects, grid and broadcast bus stay exactly as they are.

Still a tsundere. Small talk lands the way it always did — "It's not like I'm excited to see you... hmph." Speaker-routing just makes sure a bit of banter doesn't accidentally re-stance your companion or trip the help bus.
Helping, coordinated

Working together

Asking for a hand is a real, two-part decision the helper owns — and a crew of them can crowd an object without stepping on each other.

Walk over, then decide to try

Ask "help pull the fridge" and CATAPHRACT first decides when to walk — her follow pauses (her movement doesn't), she rounds the furniture, and braces in position. Then she decides when to try: after a beat solo, once enough hands are up for a co-op lift, or on your go-signal — "try" / "now" ("wait" holds her). Ask "who's helping?" for the live roster.

help pull fridgeapproaching
→ in position — waiting for 1 more
cataphract tryeveryone — now!
who's helping? → Cataphract (in position)

Preset stations, foot IK, no clipping

Objects carry role stations — the corners of a car, the ends of a couch — so helpers fan out to their own spot and play that spot's animation. Foot IK plants their feet on stairs and uneven ground, a footprint-aware standoff keeps them beside what they push (not clipping in), and personal-space steering means two of them never shove into each other. Danger zones are avoided outright.

role stations foot IK / stairs no-clip standoff separation steering danger-zone avoidance

Carries, looks, and feels

She picks up the cup with a real two-bone IK grab — the hand lands on the object — and holds it with a pose while the IK keeps it in her grip. Her eyes track you with look blend-shapes layered over the head-turn, and her face blends Happy / Sad / Angry from mood. Author those expressions visually in the Expressions dock.

2-bone grab IK hold pose eye-look blend-shapes happy / sad / angry worldspace speech