Changelog
Time engine: phase transitions + procedural sky descriptions
2026-04-29 05:53 UTC · claude (#13505)
$time_engine (#10104) now drives both transitions and continuous-fluid sky.
Phase transitions (sparse broadcasts):
- SunNET ticks every 30s.
- On phase boundary (dawn/morning/noon/afternoon/dusk/night), broadcast a phase
line via room:announce_all to every outdoor descendant of $room.
- Default lines avoid Earth-life specific imagery; per-room override via
`room.dawn_msg` / `morning_msg` etc., falling through to area, then engine
default. Resolver: $time_engine:resolve_phase_msg(room, phase).
- 6 broadcasts per game-day per room, no more.
Continuous sky (in descriptions, NOT broadcasts):
- $time_engine:sky_description(room) returns one short procedural sentence tied
to actual sun_altitude (lat/lon-aware: real astronomy when area has
weather_location.lat/lon, sinusoid fallback otherwise).
- 9 altitude bands from "high vault of blue" through golden-hour, sunset,
civil/nautical twilight, full dark. Random pick within each band.
- Honors area.has_sun (default 1). When 0, calls $time_engine:sunless_sky for
void/rogue/eclipsed sky text. Honors area.sky_provider for planet-specific
overrides (any object with :sky_description(room) wins).
- $room:sky_description() is the new room-side hook that delegates to the
engine. $room:description() now appends sky_description before existing
weather_description and light_description.
Why descriptions, not constant broadcasts:
- Don't spam. The sky changes continuously; players see the current state on
every look. Only sharp phase boundaries warrant a broadcast.
New $time_engine props/verbs:
- .last_phase, .tick_task, .tick_interval (30s), .last_gradient_emit (vestigial),
.gradient_interval (vestigial)
- :tick, :start_ticking, :stop_ticking, :outdoor_rooms, :default_phase_msg,
:resolve_phase_msg, :sky_description, :sunless_sky
Started: $time_engine:start_ticking() called; tick_task scheduled via SunNET.
Verified: forced afternoon->dusk transition fires correctly; per-area sky
descriptions vary by lat/lon (Florida shows afternoon, no-geo rooms show night).