Satisfaction & Departure
Satisfaction measures how content each elf is with life in the settlement. When satisfaction stays too low for too long, the elf will warn you, then leave permanently. This is the primary population-loss mechanic.
Overview
Every elf has a satisfaction value (0--100) that is recomputed every 10 ticks from a weighted formula combining inspiration, mood, friendships, aesthetic alignment, revel quality, and prestige. When satisfaction drops below an elf's personal departure threshold, a countdown begins. If the elf stays below threshold for 300 ticks, they become Discontented (visible warning). If they remain below threshold for 500 more ticks (800 total), they depart -- permanently removed from the settlement.
How It Works
The Satisfaction Formula
Satisfaction is recomputed from scratch every 10 ticks (not accumulated):
Satisfaction = (inspiration x 0.3) + (morale x 0.2) + (friends x 5.0) + (aesthetic_fit x 20.0) + (revel_score x 0.1) + (prestige x 0.15) + spike
The result is clamped to 0--100.
| Component | Weight | Range | Max Contribution |
|---|---|---|---|
| Inspiration total | x 0.3 | 0--100 | 30.0 |
| Morale (base 50 + mood modifiers) | x 0.2 | 0--100 | 20.0 |
| Friend count | x 5.0 | 0--20 | 100.0 (capped by max relationships) |
| Aesthetic fit (1 - distance/2) | x 20.0 | 0.0--1.0 | 20.0 |
| Last revel avg score | x 0.1 | 0--100 | 10.0 |
| Prestige score | x 0.15 | 0--100 | 15.0 |
| Satisfaction spike (revel bonuses) | +direct | varies | consumed once |
Where:
- Inspiration total = sum of all 5 inspiration channels (nature, social, rivalry, beauty, solitude), capped at 100. See Inspiration.
- Morale = base 50 + sum of all active mood modifiers, clamped 0--100. See Needs & Mood.
- Friend count = number of relationships with strength >= 50.
- Aesthetic fit = how well this elf's aesthetic position matches the settlement mean. Calculated as
1.0 - (euclidean_distance / 2.0). An elf at the exact center of the community gets 1.0; one at maximum distance (2.0 in 4D space) gets 0.0. - Revel score = average audience score from the most recent revel.
- Prestige = the elf's social prestige score (0--100), derived from revel performances and fandom.
- Spike = buffered satisfaction delta from revel events. Consumed and zeroed each time the formula runs.
Source: src/sim/systems.rs, satisfaction_system -- formula at the new_value computation.
Departure Thresholds
Each elf has a personal departure threshold that determines when they start considering leaving. This threshold is based on the elf's highest skill level at creation:
| Highest Skill Level | Base Departure Threshold |
|---|---|
| 1--3 | 15.0 |
| 4--6 | 20.0 |
| 7--9 | 25.0 |
| 10 | 30.0 |
More skilled elves are harder to satisfy -- they have higher standards.
Source: src/sim/components.rs, Satisfaction::new -- skill-based threshold.
The Departure Timeline
When satisfaction drops below the elf's personal threshold, a tick counter starts incrementing (by 10 each cycle, since the system runs every 10 ticks):
| Phase | Tick Range Below Threshold | What Happens |
|---|---|---|
| Silent | 0 -- 299 | Counter accumulates. No visible indicator. |
| Discontented | 300 -- 799 | Warning event fires. Discontented marker added. UI shows warning. |
| Departure | 800+ | Elf is permanently despawned from the world. |
- At 300 ticks: a
LeaveWarningevent fires. TheDiscontentedcomponent is added to the elf. The event reports how many ticks remain before departure. - At 800 ticks: the elf departs. A
ElfDepartedevent fires with a reason string -- either "profound dissatisfaction" (satisfaction < 10) or "aesthetic alienation" (satisfaction >= 10 but still below threshold).
The counter resets to 0 whenever satisfaction rises back above the threshold.
Source: src/sim/components.rs, Satisfaction::warning_threshold() returns 300, Satisfaction::departure_ticks() returns 800.
Recovery Mechanics
If a Discontented elf's satisfaction rises above their departure threshold, they recover:
- The
Discontentedmarker is removed. - The ticks-below-threshold counter resets to 0.
- The elf's departure threshold permanently increases by 5.0. This means each near-departure makes the elf harder to keep next time.
- The elf receives a mood modifier: "Reconsidered leaving" +8 for 300 ticks.
- Relationship affixes are updated:
- If the elf has any Friend relationships, those friends get the Tested affix (the bond survived crisis).
- If the elf has no friends, all their relationships get the Fragile affix.
The threshold increase is permanent and cumulative. An elf that has recovered twice from departure attempts has their base threshold raised by 10.0 total.
Source: src/sim/components.rs, Satisfaction::recover -- threshold += 5.0. src/sim/systems.rs, SatAction::Recover branch.
Revel Satisfaction Spikes
Revels can buffer satisfaction deltas through the satisfaction_spike field. Instead of writing directly to the satisfaction value (which would be overwritten on the next 10-tick recomputation), revel events write to this buffer. The satisfaction system consumes the spike by folding it into the formula, then zeroes the buffer.
This means a great revel performance can temporarily boost an elf's satisfaction above their threshold, potentially triggering recovery.
Source: src/sim/components.rs, Satisfaction::apply_spike and the formula in satisfaction_system.
Values & Formulas
Satisfaction Scenarios
| Scenario | Inspiration | Morale | Friends | Aes. Fit | Revel | Prestige | Total |
|---|---|---|---|---|---|---|---|
| Happy elf | 60 (x0.3=18) | 70 (x0.2=14) | 3 (x5=15) | 0.8 (x20=16) | 50 (x0.1=5) | 30 (x0.15=4.5) | 72.5 |
| Struggling elf | 20 (x0.3=6) | 30 (x0.2=6) | 0 (x5=0) | 0.3 (x20=6) | 0 (x0.1=0) | 0 (x0.15=0) | 18.0 |
| Social butterfly | 40 (x0.3=12) | 60 (x0.2=12) | 6 (x5=30) | 0.5 (x20=10) | 40 (x0.1=4) | 20 (x0.15=3) | 71.0 |
| Lonely master | 80 (x0.3=24) | 50 (x0.2=10) | 0 (x5=0) | 0.9 (x20=18) | 60 (x0.1=6) | 50 (x0.15=7.5) | 65.5 |
Recovery Threshold Escalation
| Recovery Count | Threshold (Skill 1-3) | Threshold (Skill 4-6) | Threshold (Skill 10) |
|---|---|---|---|
| 0 (never recovered) | 15.0 | 20.0 | 30.0 |
| 1 | 20.0 | 25.0 | 35.0 |
| 2 | 25.0 | 30.0 | 40.0 |
| 3 | 30.0 | 35.0 | 45.0 |
Timing Summary
| Event | Ticks |
|---|---|
| Satisfaction recomputed | Every 10 ticks |
| Silent countdown phase | 0 -- 299 ticks below threshold |
| Warning fires (Discontented) | 300 ticks below threshold |
| Negotiation window | 300 -- 799 ticks (500-tick window) |
| Departure | 800 ticks below threshold |
At real speed, the full departure timeline from first dropping below threshold is 800 ticks = 8 in-game days.
Interactions
Departure Cascade
When an elf departs, their relationships trigger mood effects on remaining elves:
| Relationship | Mood Effect | Duration |
|---|---|---|
| Friend | "Friend departed" -10 | 300 ticks |
| Rival | "Rival departed" +3 | 100 ticks |
| Acquaintance | "Acquaintance departed" -2 | 100 ticks |
Mourning: Close friends (strength >= 60) enter a Mourning state for 200 ticks. This adds an additional "Grieving" -5 mood modifier that stacks with "Friend departed." Total mood impact for a close friend's departure: -15 for 200 ticks, then -10 alone for the remaining 100 ticks. Mourning elves are drawn toward composing (creating tributes to the departed).
One departure can cascade: the mood hit from a friend leaving can push another elf below their satisfaction threshold, starting a new departure countdown. In a tightly bonded colony, losing one key elf can trigger a chain of departures.
Source: src/sim/systems.rs, satisfaction_system -- Phase 3 departure processing.
Aesthetic Fit
Aesthetic fit rewards elves who align with the settlement consensus. The settlement aesthetic center is the weighted mean of all elves' aesthetic positions. Outlier elves -- those with very different creative values -- have lower aesthetic fit and thus lower satisfaction.
This creates a natural tension: aesthetic diversity makes for richer compositions at revels, but outliers are harder to retain.
Prestige and Recognition
Prestige contributes up to 15 points of satisfaction (at score 100). Elves who perform well at revels, gain fans, and build a strong portfolio accumulate prestige. Recognizing an elf's work helps keep them satisfied.
Forest Spirit Impact
The Forest Spirit does not directly affect satisfaction, but its effects on mood (through weather disruption and comfort) can indirectly lower morale, which feeds the satisfaction formula at a 0.2 weight.
Tips
-
Friends are the strongest lever. Each friend adds +5 to satisfaction. Getting even one friendship for an at-risk elf can pull them above threshold. See Relationships for how to accelerate bonding.
-
Watch the events panel for
LeaveWarningevents. You have 500 ticks (5 in-game days) between the warning and departure. Act immediately. -
Revel spikes can save elves. A well-timed revel with high audience scores injects a satisfaction spike that can push a Discontented elf above their threshold, triggering recovery.
-
Recovery has a cost. Each recovery raises the threshold by +5 permanently. An elf that has recovered twice is now 10 points harder to keep happy. At some point, it may be better to invest in new arrivals than to keep saving the same discontented elf.
-
Outlier aesthetics are a risk. If one elf has a radically different aesthetic position from the settlement center, their aesthetic_fit will be low (potentially 0.0, costing them 20 satisfaction points). Consider using Artistic Direction to shift the settlement's creative center.
-
Morale management matters. At 0.2 weight, the difference between morale 30 (Stressed) and morale 80 (Inspired) is 10 satisfaction points. Keep needs above the Wanting threshold.
-
Monitor the "Struggling elf" scenario -- an elf with 0 friends, low inspiration, and poor aesthetic fit can have satisfaction as low as 18. That is below even the lowest departure threshold (15.0) and will trigger departure in 800 ticks with no intervention.
-
Plan for cascade risk. If your top composer has 4+ close friends and departs, every friend takes -10 mood for 300 ticks, and close friends (strength >= 60) additionally enter Mourning at -5 for 200 ticks. This can domino. Prioritize retention of well-connected elves.