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:
| Requirement | Condition |
|---|---|
| Feast Hall | At least one built |
| Compositions | At 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
RevelAttendingmarker - 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:
- The audience member's aesthetic position determines evaluation weights
- A weighted score is computed from the composition's mastery, originality, and emotional dimensions
- A social modifier is applied (+5 for social axis > 0.7, -3 for social axis < 0.3)
- Discontented elves receive a -5 penalty to their score
- The score maps to a reaction tier
| Score Range | Reaction |
|---|---|
| 0-24 | Dislike |
| 25-50 | Indifferent |
| 51-75 | Enjoy |
| 76-100 | Love |
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:
RevelAttendingmarkers 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_tickis recorded (starts the cooldown timer)
Source: src/sim/systems.rs, revel_tick_system, Aftermath phase
Values & Formulas
Mood Effects
Audience reactions produce mood modifiers:
| Reaction | Mood Effect | Duration |
|---|---|---|
| Dislike | -3 ("Disliked {name}") | 50 ticks |
| Indifferent | No 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:
| Event | Spike |
|---|---|
| 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.
| Parameter | Value |
|---|---|
| Cooldown duration | 400 ticks |
| First revel | Cooldown waived |
| Food requirement (normal) | >= 5 |
| Food requirement (Winter) | >= 15 |
| Minimum elves | 5 |
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.