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.

ComponentWeightRangeMax Contribution
Inspiration totalx 0.30--10030.0
Morale (base 50 + mood modifiers)x 0.20--10020.0
Friend countx 5.00--20100.0 (capped by max relationships)
Aesthetic fit (1 - distance/2)x 20.00.0--1.020.0
Last revel avg scorex 0.10--10010.0
Prestige scorex 0.150--10015.0
Satisfaction spike (revel bonuses)+directvariesconsumed 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 LevelBase Departure Threshold
1--315.0
4--620.0
7--925.0
1030.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):

PhaseTick Range Below ThresholdWhat Happens
Silent0 -- 299Counter accumulates. No visible indicator.
Discontented300 -- 799Warning event fires. Discontented marker added. UI shows warning.
Departure800+Elf is permanently despawned from the world.
  • At 300 ticks: a LeaveWarning event fires. The Discontented component is added to the elf. The event reports how many ticks remain before departure.
  • At 800 ticks: the elf departs. A ElfDeparted event 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:

  1. The Discontented marker is removed.
  2. The ticks-below-threshold counter resets to 0.
  3. The elf's departure threshold permanently increases by 5.0. This means each near-departure makes the elf harder to keep next time.
  4. The elf receives a mood modifier: "Reconsidered leaving" +8 for 300 ticks.
  5. 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

ScenarioInspirationMoraleFriendsAes. FitRevelPrestigeTotal
Happy elf60 (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 elf20 (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 butterfly40 (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 master80 (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 CountThreshold (Skill 1-3)Threshold (Skill 4-6)Threshold (Skill 10)
0 (never recovered)15.020.030.0
120.025.035.0
225.030.040.0
330.035.045.0

Timing Summary

EventTicks
Satisfaction recomputedEvery 10 ticks
Silent countdown phase0 -- 299 ticks below threshold
Warning fires (Discontented)300 ticks below threshold
Negotiation window300 -- 799 ticks (500-tick window)
Departure800 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:

RelationshipMood EffectDuration
Friend"Friend departed" -10300 ticks
Rival"Rival departed" +3100 ticks
Acquaintance"Acquaintance departed" -2100 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 LeaveWarning events. 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.