rules
The one module every part of First Light requires: `require("firstlight.rules")`.
firstlight.rules
The one module every part of First Light requires: require("firstlight.rules").
It holds the game's numbers (day length, temperatures, calorie burn, stove fuel
rates, bear ranges, starting stores), the layout of the station and the sites
around it, the shared blackboard M.state, the event bus M.events, and the
clock.
The clock
M.tick(dt) is called once per play frame by the scene entrypoint. It advances
M.state.run.elapsed, derives M.state.clock (day, fraction of day, hour, sun
elevation, twilight openness) and emits day, noon and firstLight.
M.sleepToMorning() jumps to 07:00 next day; M.restore(elapsed) rebuilds the
clock from a persisted run.
Pure helpers: sunElevation(day, t), twilightSeconds(day), airC(day, t),
windChill(airC, windMs), progress(day), rng(seed, salt), dist2d.
The blackboard
M.state has one section per slice. A slice writes its own section and reads
the others: run, clock, weather, body, hut, stores, bear,
journal.
Events
M.events.on(name, fn) returns an unsubscribe function; M.events.emit(name, payload) calls every listener. The names and payloads are listed at the top of
init.luau. M.say(text, seconds) emits say for the HUD.
Scoped to this part · feeds back into the world's score.