pilgrim
The helmed bronze pilgrim — the thing the player IS.
local Pilgrim = require("game.knights.pilgrim")
Pilgrim.dress(bodyEntity) -- on `bodyReady`; idempotent
Pilgrim.setHelm(false) -- take it off: it arcs down to the hip
Pilgrim.update(dt) -- drive the arc
Pilgrim.teardown() -- hand the body back exactly as the avatar left it
The scene gives every body the engine's humanoid avatar: a rig, a walk, and an undressed character mesh. This module turns that into the pilgrim — soot under bronze plate, a cloak the ash has been ground into, and the great helm that is both the armour and the blindfold this game is about.
Nothing here replaces the avatar. Every piece is an entity parented to the bone
it rides, so the dressing walks, jumps and falls with the animation it was hung
on, and teardown leaves the body as it was.
What goes on
Head, chest, waist, hips, both shoulders, elbows, hands, thighs, shins and ankles each get a socket, and the parts hang off it in metres. Plates that follow a limb are spanned between the two joints they cover, so they sit correctly whatever pose the body is in when the dressing goes on and stay aligned as the limb bends. The character mesh underneath is tinted to soot, so the bronze is the bright thing standing on it.
The helm, moving
The helm is the one part that moves on its own. It lives in one of two homes — worn on the head socket, or riding the hip — and between them it is parented to the body rather than to either, so the change is a real arc through the world with a tumble in it and not a cut. Dishelmed, the sooted coif and the two lit eyes come up in its place, with a lamp looking forward out of them.
Surface
| Call | |
|---|---|
dress(body) | Dress a composed body. Idempotent. |
setHelm(on, instant?) | Take the helm off or put it back; instant skips the arc. |
helmIsOn() | What the dressing currently shows. |
update(dt) | Drive the arc. Call every frame. |
applyDawn() | Take the breastplate sigil up with L.dawn(). |
slitPosition() | Where the burning slit is, for a camera or a caption. |
isDressed() / count() | Whether anything is dressed, and how many. |
teardown() / clearOrphans() | Take it all off. |
Both the prototype standing in the editor and the clone a round mints get their own dressing, so what an author sees in edit is what a player wears in play.
Scoped to this part · feeds back into the world's score.