MongooseA text-based world full of questionable inventions.

Changelog

All public mailing lists

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).

Back to Changelog