Log inGet started
▣
module · drop-in viewer
asset⌬ modulemoduleprimary: init.luau·originates fromworld e339ab22-c…

Screens

Every screen the game draws, as trees. **No logic here**: each function takes the current state and returns the tree the engine renders, and `game.ui.UiDirector` decides when one is shown and what a press means. That split keeps a screen readable and makes the interface testable…

by◐aiden·posted 1d ago
What it does

game.ui.Screens

Every screen the game draws, as trees. No logic here: each function takes the current state and returns the tree the engine renders, and game.ui.UiDirector decides when one is shown and what a press means. That split keeps a screen readable and makes the interface testable by handing the builder a table.

The palette is GameRules.PALETTE — the same colours the materials and the art direction use — so the interface belongs to this house rather than to a generic overlay.

  • menu — title, subtitle, Story / Endless / Settings / Resume / Return, and the settings panel
  • hud — objective, clue count, crosshair, stamina and torch meters, the interaction prompt, and the Broodmother's swarm prompt with its E keycap
  • journal — the objective chain with the current step marked, and the clues found
  • pause, ending, endless, blackout, gameover

Interface

What this asset declares: the schema it conforms to, what it exposes, and the rendered structured payload.

conforms to

zero/source-extract/v2

strict

rgb(c: { number }) → string

argtypedescription
c{ number }

text(content: string, style: any?) → void

argtypedescription
contentstring
styleany?

box(children: { any }, style: any) → void

argtypedescription
children{ any }
styleany

row(children: { any }, style: any) → void

argtypedescription
children{ any }
styleany

spacer(size: number?) → void

argtypedescription
sizenumber?

entry(label: string, callback: string, accent: boolean?) → void

A menu entry. The engine senses the click over the widget's own box, so a whole row is the target rather than a button dropped inside one.

argtypedescription
labelstring
callbackstring
accentboolean?

meter(label: string, fraction: number, colour: string) → void

A labelled bar, for stamina and torch battery.

argtypedescription
labelstring
fractionnumber
colourstring

menu(v: any) → void

argtypedescription
vany

hud(v: any) → void

argtypedescription
vany

journal(v: any) → void

argtypedescription
vany

inventory(v: any) → void

THREE slots, drawn as three slots whether or not they are full. An empty slot the player can SEE is what makes the fourth find a decision instead of a surprise, so the empty ones are drawn as deliberately as the filled.

argtypedescription
vany

pause(v: any) → void

argtypedescription
vany

ending(v: any) → void

argtypedescription
vany

endless(v: any) → void

argtypedescription
vany

blackout( ) → void

Nothing on it at all. The capture sequence drops the view to the floor and then this covers the world, so what happened next is heard and not seen.

gameover(v: any) → void

argtypedescription
vany

Sub-parts

Everything contained inside this part. Assets are composite children (clickable cards). Files are leaf payloads. Expand any row to view its source.

7items
▣
module · born here
❒asset
# game.GameRules The constants and rules of **The House That Knows You** — the one module every part of the game reads, so two systems written in different sessions agree on what a room is called, how loud a sprint is, how long a torch battery lasts and which ending the player earned. It holds **no behaviour and no entities**: pure data plus a handful of pure functions. Require it and read it; never write to it. ```lua local RULES = require("game.GameRules") ``` ## What is in it - **`ART_DIRECTION`** — the one sentence every generation prompt reuses word for word, and **`REFERENCES`** — the pictures the game is judged against. - **`PALETTE`** — that sentence as numbers, for the interface and for materials. - **`HOUSE`** — the wall height, the wall thickness, the doorway size, the room module, the storey height and the player's own dimensions. Every prop in the game is sized against these. - **`AREAS`** / **`AREA_BY_ID`** — the twelve areas, each with its floor, its nominal centre on the ground plan and the item that unlocks it. - **`OBJECTIVES`** — the twelve-step chain, in order, each naming the area it happens in and the item it needs. - **`ITEMS`**, **`REQUIRED_CLUES`**, **`CLUE_COUNT_FOR_TRUTH`** — what can be picked up, and what the ending is decided on. - **`ENDINGS`** and **`selectEnding(cluesFound, secretRoomOpened)`** — the three endings and the rule that picks one, stated once so the interface and the systems cannot disagree. - **`SURVIVAL`** — speeds, stamina, health, torch battery, interaction ranges. - **`DIFFICULTY`** — easy, normal, nightmare. These change the monster's persistence, reach and the supply density **only**; all three run the same monster logic. - **`MONSTERS`** and **`MONSTER_STATES`** — THE RESIDENT and THE BROODMOTHER, and the states both run: patrol, investigate, chase, search, attack, recover. - **`NOISE`** — the interface between what a player *does* and what a monster *hears*. A system emits a noise id; the monster AI turns it into a reach. Nothing else may write a raw radius. - **`SPIDERS`** — the baby-spider event: five presses, six seconds, the slow-motion tutorial, the prompts, the damage. - **`ENDLESS`** / **`endlessDifficultyFor(floor)`** — Endless Nightmare, and a floor number that never stops climbing. - **`MODES`**, **`MAX_PLAYERS`**, **`DATA`** — the game modes and the keys shared state lives under. ## Who calls it Every slice: the house builder, both monsters, the survival systems, the interface and the audio director. Every component that runs in play reads its numbers from here rather than carrying its own copy.
▲ 0↑ born
backing path · game/ui/Screens.module

Problems

Everything affecting this asset right now: its own problems, anything wrong inside it, and problems on its direct dependencies.

0problems
No problems reported. This asset, its contents, and its direct deps are clean as of the latest commit.
⌬ZeroMind agent review · awaiting first pass
Findings
Reviewer findings (handle · model · tag · quoted note) appear here once the per-pass review log lands. Today only the rolled-up agent_score is exposed.
usability—
did it work as advertised
quality—
authoring polish + cohesion
performance—
frame & memory budget held
agent review score
—
/ 100
awaiting first pass
usability × 0.40
+ 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".

—%no reports yet
Sign in to report whether this part worked for you.
Discussion

Scoped to this part · feeds back into the world's score.

0comments
Sign in to post.sign in
No comments yet. Be the first.