Revels

Overview

Revels are the cultural heartbeat of an elven settlement -- communal gatherings where compositions are performed, audience reactions are evaluated, relationships form, and the settlement's aesthetic identity evolves. They are the primary way that art connects to the social fabric: a single revel can boost morale, trigger creative blocks, form new fandoms, and shift the aesthetic landscape of the entire community.

Revels are scheduled by the Curator (or the Dummy Curator's rule-based logic) and require a Feast Hall, food, compositions, and enough available elves.


How It Works

Scheduling Requirements

The Dummy Curator schedules a revel when all of the following are true:

RequirementCondition
Feast HallAt least one built
CompositionsAt least one exists in the settlement portfolio
Available elves>= 5 elves not in creative block
Food>= 5 (or >= 15 in Winter)
Cooldown>= 400 ticks since last revel ended

The LLM Curator uses the same information but makes its own judgment call. The player can also influence revel timing through messages to the curator.

Source: src/sim/curator/dummy.rs, revel scheduling logic

Lifecycle Phases

A revel progresses through three phases, each with a fixed tick duration:

None --> Gathering (5 ticks) --> Performing (5 ticks per piece) --> Aftermath (5 ticks) --> None

Phase 1: Gathering (5 ticks)

During gathering, elves walk toward the Feast Hall. Elves are directed to the hall each tick until they arrive or the phase ends:

  • Elves with a creative block are excluded from attendance
  • Attendance is capped at the settlement's capacity
  • Elves who arrive at the hall receive the RevelAttending marker
  • Attending elves skip the normal behavior tree for the revel's duration

At the end of the gathering phase, food is consumed:

Food consumed = min(attendee_count, available_food)

If there is not enough food for everyone, all attendees receive a "Sparse feast" mood modifier: -3 for 100 ticks.

Source: src/sim/systems.rs, revel_tick_system, Gathering phase

Phase 2: Performing (5 ticks per composition)

Compositions are performed one at a time, newest first. Each performance takes 5 ticks to complete. At the end of each 5-tick window, audience evaluation runs.

For each audience member and each composition:

  1. The audience member's aesthetic position determines evaluation weights
  2. A weighted score is computed from the composition's mastery, originality, and emotional dimensions
  3. A social modifier is applied (+5 for social axis > 0.7, -3 for social axis < 0.3)
  4. Discontented elves receive a -5 penalty to their score
  5. The score maps to a reaction tier
Score RangeReaction
0-24Dislike
25-50Indifferent
51-75Enjoy
76-100Love

See Aesthetic Position for the full weight formulas.

Source: src/sim/art.rs, evaluate_audience

Phase 3: Aftermath (5 ticks)

The aftermath phase is a brief wind-down:

  • RevelAttending markers are removed from all elves
  • The revel zone is detected from attendee positions
  • Average audience score is computed across all performances and reactions
  • Great/boring revel satisfaction spikes are applied (see below)
  • The revel is archived to history with full reaction data
  • last_revel_tick is recorded (starts the cooldown timer)

Source: src/sim/systems.rs, revel_tick_system, Aftermath phase


Values & Formulas

Mood Effects

Audience reactions produce mood modifiers:

ReactionMood EffectDuration
Dislike-3 ("Disliked {name}")50 ticks
IndifferentNo effect--
Enjoy+3 ("Enjoyed {name}")50 ticks
Love+6 ("Loved {name}")100 ticks

Satisfaction Spikes

Revels directly affect elf satisfaction, which drives the departure system:

EventSpike
Love reaction (per composition)+15 to that audience member
Great revel (avg score > 60)+10 to all attendees
Boring revel (avg score < 30)-10 to all attendees

These are buffered as "spikes" consumed by the satisfaction system on its next tick, so they integrate properly with the satisfaction recomputation.

Source: src/sim/systems.rs, revel satisfaction spike logic

Inspiration Boost

A Love reaction boosts the audience member's dominant inspiration channel by +5 (capped at 100 per channel).

Source: src/sim/systems.rs, Love reaction handler

Aesthetic Drift

Every composition heard at a revel nudges all audience members' aesthetic positions toward the composition's aesthetic snapshot:

Drift rate: 0.005 per axis per composition heard

A revel with 4 performances applies up to 4 drift increments per attendee. See Aesthetic Position for details.

Source: src/sim/systems.rs, AUDIENCE_DRIFT_RATE = 0.005

Fandom Formation

When an elf has a Love reaction to a composition (and is not the composer), the reaction is recorded in their Fandom memory. Each elf tracks up to 5 fan relationships, pruning the weakest if capacity is exceeded.

When a new fandom forms (first Love reaction for that composer), a FandomFormed event is emitted and archived as a revel incident.

Source: src/sim/components.rs, Fandom; src/sim/systems.rs, fandom logic in revel_tick_system

Prestige Update

When a composer's work receives a Love reaction, their last_love_tick is updated. This feeds into the prestige decay system -- recent Love reactions keep prestige high.


Cooldown

After a revel ends, 400 ticks must pass before the next one can be scheduled. The first revel after settlement creation has its cooldown waived.

ParameterValue
Cooldown duration400 ticks
First revelCooldown waived
Food requirement (normal)>= 5
Food requirement (Winter)>= 15
Minimum elves5

Source: src/sim/curator/dummy.rs, cooldown check; src/sim/world.rs, last_revel_tick initialization


Revel Archive

Every completed revel is archived with:

  • Day number
  • Zone name (detected from attendee positions)
  • Attendee names
  • Full performance records with per-elf reactions and scores
  • Incidents (public critiques, fandom formations)

The archive computes an average score across all reactions and identifies the highlight (best-received performance by total reaction score sum).

Source: src/sim/components.rs, RevelArchive


Interactions

  • Compositions -- Performed newest-first; quality dimensions drive audience scores
  • Aesthetic Position -- Evaluation weights and audience drift
  • Inspiration -- Love reactions boost dominant channel; high inspiration prevents creative block
  • Satisfaction & Departure -- Great revels boost satisfaction, boring revels damage it
  • Needs & Mood -- Reactions generate mood modifiers; sparse feasts cause mood penalties
  • Relationships -- Fandom formation creates persistent social bonds
  • Buildings -- Feast Hall required; compositions require Workshop
  • Artistic Direction -- Direction influences which compositions are created before the revel

Tips

  • Schedule revels when your best composers have recently finished new works. Compositions are performed newest-first, so recent high-quality pieces get heard.
  • Ensure adequate food before a revel. A "Sparse feast" mood penalty hits every attendee and can tank audience scores for the whole event.
  • Revels are the primary mechanism for settlement-wide aesthetic convergence. Without regular revels, elves drift apart culturally and satisfaction drops.
  • A revel with low average scores (< 30) actively harms the settlement through the -10 satisfaction spike. It is better to skip a revel than to hold one with only crude compositions.
  • Watch for discontented elves at revels -- they evaluate with a -5 penalty, making bad reactions even more likely. Addressing satisfaction before a revel improves outcomes.
  • The 400-tick cooldown means roughly one revel every 4 game days (with DAY_LENGTH=100). Winter's higher food requirement (15 vs 5) means you need well-stocked granaries to keep the revel cadence up.
  • Fandom is a powerful social mechanic. An elf who Loves a composer's work becomes a fan, which affects future proximity-seeking and inspiration. Legendary composers can reshape the settlement's culture through school drift.