# henter_wood
The stave: dark, dry, barely reflective wood.
# glew_halo_mesh
Five nested shells in one mesh. Drawn additive, they build a radial falloff out of geometry alone — how a mote glows with no bloom pass. Built by game.hero.meshes.
# lantern_core
The flame inside the lantern glass.
# lantern_cage_mesh
The lantern's brass: roof, rings, six corner posts, base pan and hanging ring. Built hanging below its own origin so it swings from the right point. Built by game.hero.meshes.
# core
<!-- zero:scaffolded-readme -->
<!-- Replace the line below with what this module provides and who
consumes it, then delete both comment lines. -->
TODO: describe this module.
# henter_arm_mesh
A sleeve, hanging from the shoulder at its own origin and flaring at the cuff. Built by game.hero.meshes.
# henter_pole_mesh
The stave the lantern rides on: tapered, with a weighted butt. Built by game.hero.meshes.
# henter_wool
The Henter's mantle and cuffs: heather-grey wool with a cool sheen, drawn from both sides so an open cape has no missing wall.
# lantern_glass_mesh
The lantern's six panes, drawn from both sides so the lantern has an interior. Built by game.hero.meshes.
# henter_brass
The lantern's cage, the stave's collars and the throat clasp: warm brass with a faint catch of its own so it reads at night.
# glew_halo
The additive shell around a mote and around the lantern's flame. Adds without writing depth, so nested shells build a falloff.
# henter_glint
The two amber sparks in the dark of the hood — the lantern catching the Henter's eyes.
# henter_rope
The rope belt, the satchel strap, the cowl cord and the bedroll ties.
# henter_hood_mesh
The cowl: a hood whose peak leans further forward the higher it climbs, and whose front is genuinely open. Built by game.hero.meshes.
# henter_void
The shadow inside the cowl where a face would be. Near-black, and reflects almost nothing.
# henter_cloak_mesh
The Henter's cloak: one fall of heavy cloth from the shoulders to the ground, its hem waving in and out five times around. Built by game.hero.meshes.
# meshes
The Henter's geometry, and the bake that writes it out.
Every shape the hero slice draws is defined here as a function over
`game.hero.shapes`, and `bake()` turns each one into a durable `.mesh` asset
under `/source/game/hero/`. The component resolves the assets by identity and
never builds geometry at runtime, so every client in the world draws the same
vertices out of one shared GPU mesh.
```luau
require("game.hero.meshes").bake() -- every mesh
require("game.hero.meshes").bake("lantern_cage_mesh") -- just one
```
The bake returns a row per mesh with its triangle count and local AABB, so a
shape can be checked without rendering it. Change a profile below, run the
bake, and the figure is different on the next frame.
## The parts
| Mesh | |
|---|---|
| `henter_cloak_mesh` | One fall of heavy cloth from the shoulders to the ground, waving in and out five times around the hem. Narrows hard above the waist so the sleeves have somewhere to come out of. |
| `henter_hem_mesh` | The band of mantle cloth turned up along that hem. |
| `henter_mantle_mesh` | A short shoulder cape in a different cloth. Its six-lobed hem breaks the cloak's five, so the two never line up. |
| `henter_hood_mesh` | A cowl whose peak leans further forward the higher it climbs, and whose front is genuinely open — the quads over the face are left out. |
| `henter_arm_mesh` | A sleeve hanging from the shoulder at its own origin, flaring at the cuff. |
| `henter_pole_mesh` | The tapered stave, with a weighted butt. |
| `henter_pole_brass_mesh` | Two collars, a ferrule, and the hook the lantern hangs from, bent forward out of the top. |
| `lantern_cage_mesh` | Roof, two rings, six corner posts, base pan and hanging ring — built hanging BELOW its own origin, so it swings from the right point. |
| `lantern_glass_mesh` | Six panes, drawn from both sides so the lantern has an interior. |
| `glew_spark_mesh` | A six-point spark with alternating spike lengths. |
| `glew_halo_mesh` | Five nested shells in one mesh: additive, they build a radial falloff out of geometry alone. |
## Landmarks
`CHEST_Y` is the pivot every part above the waist is built around;
`SHOULDER` and `ARM_LENGTH` place the sleeves; `POLE_HOOK` is where the lantern
hangs, in the stave's own space. The figure stands 1.94 m, hem on the ground.
# glew_core
A mote's own light: the amber the whole palette is built to frame.
# henter_hem_mesh
The band of mantle cloth turned up along the cloak's hem. Built by game.hero.meshes.
# henter_pole_brass_mesh
The brass on the stave: two collars, a ferrule, and the hook the lantern hangs from. Built by game.hero.meshes.
# heroaudio
The sounds the Henter's own body makes.
The sound slice owns the bed, the mix and the voice; the rules slice owns the
hent and the catch. What is left is what the FIGURE does: boots in wet heather,
a hung lantern that chinks on its hook when the swing turns over and creaks
when a snatch throws it forward, and the small warm note a mote makes dropping
into the lantern.
Every clip is synthesised here from raw f32 PCM, so none of it depends on a
generation service and none of it can arrive silent because a network call
failed.
```luau
require("game.hero.heroaudio").bake() -- (re)write every clip
HeroAudio.step({ pos = { x, y, z }, volume = 0.3 })
HeroAudio.play("lantern_chink", { pos = { x, y, z } })
```
`bake()` writes the clips as `.soundClip` assets under `game/hero/clips` and
reads each one back with `audio.info`, so it reports what actually landed
rather than what it meant to write.
| Clip | |
|---|---|
| `step_a` / `step_b` / `step_c` | 190 ms. Filtered noise through a one-pole low-pass with a heel under it; three openings of the filter so a run of steps never repeats. |
| `lantern_chink` | 160 ms. Three struck partials behind a noise transient. |
| `lantern_creak` | 420 ms. A low resonance with a slow grip-and-slip ripple in it. |
| `glew_home` | 260 ms. A small rising note with a bell over it. |
Playback goes through `game.audio.sfx`, so every one of these gets the voice
budget, the collapse window and the pitch jitter that keeps a crowded hill from
turning to mush. Steps and chinks are priority 0 — set dressing that gives way
to the narrator.
# henter_mantle_mesh
The Henter's shoulder cape. Its six-lobed hem breaks the cloak's five, so the two never line up. Built by game.hero.meshes.
# henter_hood
The cowl's cloth. The cloak's colour, drawn from both sides so the hood's open mouth reads.
# glew_spark_mesh
A mote of glew: a six-point spark with alternating spike lengths, so it turns without ever looking like a sphere. Built by game.hero.meshes.