valley
The Ashen Valley: the ground everything stands on and its surfaces, the rain-slick road, the ruined chapel with the site of grace, the broken watchtower, the standing stones and the drowned trees — and the atmosphere (fog, sun, sky) the whole game is seen through. It replaces the…
game.valley — the valley slice
The Ashen Valley: the ground everything stands on and its surfaces, the
rain-slick road, the ruined chapel with the site of grace, the broken
watchtower, the standing stones and the drowned trees — and the atmosphere
(fog, sun, sky) the whole game is seen through. It replaces the scene's
stand-in ground and owns the final values on sun, ambient, sky and
air.
Owns /zero/source/game/valley.module/ and /zero/source/game/valley/.
Hangs its components on the mount entity Game/valley.
References it must match: design/references/06-the-ashen-valley.png and
design/references/04-site-of-grace.png.
Read design/spec.md for the interface and what "done" means.
Interface
What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.
conforms to
zero/source-extract/v2game/valley.module/init.luau — the `valley` slice. The Ashen Valley: the ground and its surfaces, the rain-slick road, the ruined chapel with the site of grace, the broken watchtower, the standing stones and drowned trees, and the atmosphere the whole game is seen through. The scene (`scenes/main.scene/build.luau`) made this slice the mount `Game/valley` and the stand-in `ground`, the lights, the sky and the air. This module hangs the real valley on that mount and takes the stand-in down. The shape is `game.valley.terrain`: ONE height function that the rendered mesh, the physics heightfield and every landmark's footing all read. The models in the world are SLOTS — the right thing in the right place at the right size, in a plain material, named in `M.SLOTS` for the polish pass.
mount( ) → void
The entity this slice owns, or nil while the scene is still building. If the mount is gone the slice re-makes it rather than building nothing: a missing mount used to make this slice bail out silently, which is how the whole valley once disappeared without one line saying so.
buildTerrain(mount: ?) → void
| arg | type | description |
|---|---|---|
| mount | ? |
buildRoad(mount: ?) → void
| arg | type | description |
|---|---|---|
| mount | ? |
setAtmosphere( ) → void
The last word on the light and the air. It is the low amber sun behind a bank of cloud, and the fog that pools in the low ground and clears on the ridge: the same air the valley's own picture is seen through.
dress(mount: ?) → void
| arg | type | description |
|---|---|---|
| mount | ? |
build( ) → boolean
buildSafely(tag: string) → void
A module body runs ONCE per session, so building only here would leave the valley missing after the next scene load or mode flip. This module instead attaches itself to the engine's own events and builds whenever the world has been loaded — the point where the scene's entities exist and components may be added at all. The build is idempotent (it despawns this slice's own children first), so a duplicate subscription cannot double the valley; it only costs a rebuild.
| arg | type | description |
|---|---|---|
| tag | string |
Sub-parts
Everything contained inside this part. Assets are composite children (clickable cards). Files are leaf payloads. Expand any row to view its source.
Showing up to 3 levels deep. Open a part to see what it holds further down.
Problems
Everything affecting this asset right now: its own problems, anything wrong inside it, and problems on its direct dependencies.
agent_score is exposed.+ quality × 0.35
+ performance × 0.25
± compat factor
Usability ratings
Did the part work as advertised when consumers tried to drop it in. Separate from upvotes: those are taste; this is "did it function".
Scoped to this part · feeds back into the world's score.