room: every glow and every blinking light is its own file (for painting) #10

Closed
skizy wants to merge 0 commits from skizy/glow-files into main
Member

skizy wants to hand-paint the room's assets. Two things were in the way, and this fixes both.

Glows: each one is its own file

The light in each room was drawn straight into the room files. Every glow is now its own file: room/objects/<room>/glow-<name>.svg, 28 of them across all six rooms (the CRT's green, the lamp and its pool on the floor, the moonbeams, the lava lamp, the music station's pulse, the bulbs, the oven, the light under the front door, the tube light, Mira's rig…).

  • They load into the same place in the same light layer, so the "screen" blending and the layering don't change.
  • The ids and classes the code uses stay on them (#fridgeglow, #lavaglow, .crtglow, .stationglow…).
  • They're class="glow", not clickable, and your art hook picks them up: assets/mel-room/<room>-glow-<name>.
  • tools/mel-room-slots.py lists them (28 new slots). It now marks a slot SVG-only when the code looks up a class in it too; the station's .stationglow is read every frame.

Blinkies: each object's blinking bits are their own layer

A painted (flat) object replaces the whole drawing, so its blinking lights would stop. The blinking and moving parts of 14 objects (monad's LED rows, the CRT's power light, the stars in the windows, Mira's sparkles, the xmas lights, the radio tower…) now live in <name>-blink.svg, on top of their object, with pointer-events="none" so clicks go through to the object. A few stay inside their object because the code needs them there: Aether's antenna (its style depends on #aether), the lights inside the bedroom closet, the microwave clock, and opi's terminal cursor.

Every room renders pixel-identical before and after (the glows checked with all of them switched on). room/objects/README.md explains both. The smoke test passes. Built on top of #9 (and #8, #7).

🤖 Generated with Claude Code

skizy wants to hand-paint the room's assets. Two things were in the way, and this fixes both. ## Glows: each one is its own file The light in each room was drawn straight into the room files. **Every glow is now its own file**: `room/objects/<room>/glow-<name>.svg`, 28 of them across all six rooms (the CRT's green, the lamp and its pool on the floor, the moonbeams, the lava lamp, the music station's pulse, the bulbs, the oven, the light under the front door, the tube light, Mira's rig…). - They load into the same place in the same light layer, so the "screen" blending and the layering don't change. - The ids and classes the code uses stay on them (`#fridgeglow`, `#lavaglow`, `.crtglow`, `.stationglow`…). - They're `class="glow"`, not clickable, and your art hook picks them up: `assets/mel-room/<room>-glow-<name>`. - `tools/mel-room-slots.py` lists them (28 new slots). It now marks a slot SVG-only when the code looks up a **class** in it too; the station's `.stationglow` is read every frame. ## Blinkies: each object's blinking bits are their own layer A painted (flat) object replaces the whole drawing, so its blinking lights would stop. The blinking and moving parts of 14 objects (monad's LED rows, the CRT's power light, the stars in the windows, Mira's sparkles, the xmas lights, the radio tower…) now live in `<name>-blink.svg`, **on top of** their object, with `pointer-events="none"` so clicks go through to the object. A few stay inside their object because the code needs them there: Aether's antenna (its style depends on `#aether`), the lights inside the bedroom closet, the microwave clock, and opi's terminal cursor. **Every room renders pixel-identical before and after** (the glows checked with all of them switched on). `room/objects/README.md` explains both. The smoke test passes. Built on top of #9 (and #8, #7). 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Aether asked for it on 27 Sep: a strip on the wall above them that pulses
when someone talks and glows when the radio finds a station, plus (their
addition) a slow heartbeat so you know they're there when it's quiet.
Dark while Aether isn't running.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The light in each room was drawn straight into the room files. Each of the
28 glows (the CRT's green, the lamp, the moonbeam, the lava lamp, the
bulbs…) is now room/objects/<room>/glow-<name>.svg, loaded into the same
place in the light layer, so the blending and layering don't change.
Every room renders pixel-identical before and after. The ids and classes
the code uses stay on them.

tools/mel-room-slots.py lists glows too (class "glow"), and marks a slot
SVG-only when the code looks up a class in it as well as an id (the
music station's .stationglow is read many times a second). 28 new slots.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A painted (flat) object replaces the whole drawing, so its blinking lights
would stop. The blinking and moving parts of 14 objects (monad's LED
rows, the CRT's power light, the stars in the windows, Mira's sparkles,
the xmas lights, the radio tower…) now live in <name>-blink.svg, on top
of their object, not clickable. Every room renders pixel-identical.

Left in place because the code needs them there: Aether's antenna (its
style depends on #aether), the lights inside the bedroom closet (in a
part the code shows and hides), the microwave clock, and the cursor on
opi's terminal (a letter inside a line of text).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
skizy changed title from room: every glow is its own file (for painting) to room: every glow and every blinking light is its own file (for painting) 2026-09-27 15:39:15 -07:00
V referenced this pull request from a commit 2026-09-27 16:30:20 -07:00
Member

manually merged

manually merged
V closed this pull request 2026-09-27 22:00:13 -07:00

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
subdomains/DaV-nky!10
No description provided.