Scars
Elves remember. When something significant happens to them — a partnership ends, a love goes unreturned, a pride is wounded past bearing — the event leaves a permanent mark called a scar. Scars shift root personality values by small amounts, and those shifts are forever. They accumulate. A long-lived elf who has weathered two heartbreaks and a betrayal is, mechanically, a different person than the one who arrived — slightly more cautious, slightly more bitter, slower to warm, quicker to leave.
This is the deep-time social layer of the sim. Most mood shifts decay. Scars don't.
Overview
A scar has two effects:
- A permanent shift to root personality values. Root values feed expressed values through slow maturation (see personality), so the change is visible but gradual.
- A narrative label — a human-readable string attached to the elf, visible in the detail view, naming what happened and who caused it.
Scars are additive. The same elf can accumulate multiple heartbreaks, a betrayal, and a partner loss, and every one of them contributes to the final root values. Root values are clamped to the range 0.05 -- 0.95 after each scar applies, so an elf can approach but never reach absolute extremes.
Each scar also costs -1.5 satisfaction forever, via the satisfaction system's scar_penalty term. Four scars is -6.0 permanent satisfaction — a background gravity pulling the elf toward departure.
Source: crates/er-sim/src/sim/components.rs, Scars, PersonalityScar, ScarKind, Personality::apply_scar. crates/er-sim/src/sim/systems/satisfaction.rs, scar_penalty term.
Scar Types
Five scar kinds exist today. Each has its own trigger, axis shift, and narrative template.
| Scar | Root Shift | Narrative Template | Source System |
|---|---|---|---|
| Heartbreak | boldness -0.05 | "Scarred by the silence of [partner]" | romance dissolution |
| EgoWound | pride +0.03, patience -0.05 | "[elf] bears the mark of wounded pride" | personality crisis (EgoWound expiry) |
| Betrayal | patience -0.05, boldness -0.03 | "Trust broken by [partner]" | romance dissolution (betrayal branch) |
| Unrequited | boldness -0.03, pride +0.02 | "Love unmet by [target]" | romance courtship (one-sided resolution) |
| PartnerLoss | boldness -0.05 | "Lost [partner] to the road" | satisfaction (partner departure) |
Note the pattern: four of five scars shift boldness down. Emotional loss makes elves cautious. The sim systematically erodes boldness across an elf's romantic life, and only deliberate intervention — giving them friends, meaningful work, aesthetic alignment — keeps them bold enough to form the next partnership.
Source: crates/er-sim/src/sim/components.rs, ScarKind enum and Personality::apply_scar match.
Formation Conditions
Each scar has precise trigger conditions in code. Knowing them helps you predict where scars will appear and intervene before they do.
Heartbreak — both partners
Fires in the romance dissolution system (every 100 ticks) when a partnership dissolves via the normal-drift path (aesthetic distance, prestige asymmetry, accumulated pressure ≥ 100.0). Both ex-partners receive the scar and a "Partnership ended" -8 mood for 300 ticks.
- Condition:
dissolution_pressure >= 100.0AND origin history does not save the partnership. - Applied to: both elves.
- Label: each sees
"Scarred by the silence of [the other]".
Betrayal — the betrayed only
Fires in the same dissolution system, but through a different branch. If an elf's partner is currently courting someone else, the partnership dissolves instantly (pressure snaps to 100.0, reason = "betrayal").
- Condition: partner has
RomanticState.courting = Some(third_name)wherethird_name != self. - Applied to: only the betrayed elf — the cheater walks away with no permanent mark.
- Label:
"Trust broken by [ex-partner]". - Mood: -10 "Betrayed" for 300 ticks.
- Origin history does not protect against betrayal. By design: a chosen act is categorically different from gradual drift.
Unrequited — the pining elf
Fires in the romance courtship system (every 50 ticks) when an attraction has been one-sided for too long.
- Condition:
tick - spark_tick >= 200AND the target's warmth toward this elf is< 30.0. - Applied to: the elf who pined.
- Label:
"Love unmet by [target]". - Side effects: their own warmth toward the target is set to 20.0 (bittersweet memory, not erased); -5 "Unrequited feelings" mood for 150 ticks.
PartnerLoss — the one left behind
Fires in the satisfaction system (every 10 ticks, departure phase) when a partner elf departs the settlement (satisfaction-driven departure, legacy, or otherwise).
- Condition: the departing elf has an active partnership; their partner remains.
- Applied to: the remaining partner only.
- Label:
"Lost [departed] to the road". - Side effects: partnership is cleared (
partner = None,courting = None,dissolution_pressure = 0);Mourningattached for 300 ticks (longer than friend mourning's 200); grief stacks with any existing mourning.
EgoWound — from the crisis, not the argument
Unlike the others, EgoWound does not fire directly from an event. It is the expiry payload of the EgoWound crisis marker (see Transient Crisis Markers below). The chain:
- Conflict system (every 10 ticks): when two elves argue, if one has
pride > 0.85 AND morale < 40 ANDno existing EgoWound, they gain anEgoWoundcrisis marker with 150 ticks remaining and a -8 "Wounded pride" mood. - Personality crisis system (every 10 ticks): decrements the marker each tick-batch. When it hits 0, the marker is removed — and the elf receives a permanent EgoWound scar.
So EgoWound scars are a delayed consequence of unresolved wounded pride. A proud elf whose morale recovers fast enough might weather the crisis without lasting mark — if the crisis expired would still leave the scar, but the timeline gives you ~15 in-game days to fix what hurt them.
Source: crates/er-sim/src/sim/systems/social.rs, conflict_system (crisis trigger at line ~598), personality_crisis_system (scar on EgoWound expiry at line ~702).
Transient Crisis Markers
Four non-scar marker components exist as short-lived ECS attachments. They modulate behavior temporarily and sometimes leave a permanent scar when they expire. They are not scars — they are crisis states the elf is currently in.
| Marker | Trigger | Duration | Mood While Active | Scar on Expiry |
|---|---|---|---|---|
| EgoWound | Argument AND pride > 0.85 AND morale < 40 | 150 ticks | -8 "Wounded pride" | Yes — EgoWound scar |
| Withdrawal | boldness < 0.15 AND company > 80 | 200 ticks | -3 "In withdrawal" | No |
| RecklessAbandon | patience < 0.15 AND stalled aspiration | 100 ticks | +2 "Reckless abandon" | No |
| LongPatienceBroken | Argument AND patience > 0.85, 10% chance | 50 ticks | -5 "Patience shattered" | No |
EgoWound is the only crisis that always leaves a permanent scar. The others are temporary — a lesson the elf learned, or a weather pattern they rode out. They fire PersonalityCrisis cultural events when they begin, but no ScarFormed event when they expire (except EgoWound).
Why the asymmetry? Bold elves overwhelmed by crowding (Withdrawal) can recover when the crowd thins; impulsive elves giving up on stuck goals (RecklessAbandon) feel relief, not damage; patient elves who finally snap (LongPatienceBroken) reset. But pride, once wounded below morale-40, calcifies — the memory persists as a personality shift.
Source: crates/er-sim/src/sim/components.rs, EgoWound/Withdrawal/RecklessAbandon/LongPatienceBroken structs. crates/er-sim/src/sim/systems/social.rs, personality_crisis_system — all four markers decay, only EgoWound writes a scar.
Events
Two CulturalEvent variants surface scars and crises to the player log.
ScarFormed
Fires every time a scar is applied. Payload:
#![allow(unused)] fn main() { ScarFormed { elf: String, // the scarred elf's display name scar_label: String, // e.g. "Scarred by the silence of Thalindra" } }
- Priority:
Notable(shows in standard log, not just detailed view). - Display string: the
scar_labelverbatim. The scar speaks for itself — no templating wraps it. - Fires from:
romance_courtship_system(Unrequited),romance_dissolution_system(Heartbreak, Betrayal),satisfaction_system(PartnerLoss),personality_crisis_system(EgoWound scar on crisis expiry).
PersonalityCrisis
Fires when a transient crisis marker is attached — not when it expires.
#![allow(unused)] fn main() { PersonalityCrisis { elf: String, crisis: String, // "ego wound" | "patience shattered" | "withdrawal" | "reckless abandon" } }
- Priority:
Notable. - Display string (evocative per crisis):
"ego wound"→"[elf] retreats, pride wounded beyond bearing""patience shattered"→"[elf]'s legendary patience finally snapped""withdrawal"→"[elf] withdraws from the settlement, overwhelmed""reckless abandon"→"[elf] throws caution aside in a manic burst"
Source: crates/er-sim/src/sim/events.rs, ScarFormed and PersonalityCrisis variants; EventPriority match; display_string implementation.
Interactions
The Boldness Spiral
Scars push elves toward departure through two reinforcing channels:
- Direct satisfaction penalty. Each scar is a permanent -1.5 on the daily satisfaction calculation. Four scars is -6.0 — approaching the threshold where an elf starts strongly considering departure.
- Boldness erosion. Heartbreak, Betrayal, PartnerLoss, and Unrequited all push boldness down. Lower boldness slows romance warmth accumulation (x0.6 for boldness < 0.3 vs x1.3 for > 0.7), making recovery through new partnership harder. It also raises the chance of a revel absence — "chose the forest over the fire" — compounding isolation.
An elf who loses one partner to departure and then goes unrequited when reaching out to someone new has two scars costing -3.0 satisfaction, boldness reduced by -0.08, and is now measurably worse at starting the next partnership. Without intervention, the spiral is how elves leave.
Composition Properties
Scars shape the art elves make.
- Heartbreak scar + currently unpartnered: unlocks the
Heartbreakcomposition property. Emotional score +15, property slot filled. - PartnerLoss scar for a currently-mourned elf: +10 emotional boost (stacked if the mourning is for the same name as the scar). No property slot consumed — it's a compound resonance, grief made legible through art.
Note: the LoveSong composition property is driven by currently courting, not by scars. Wiki entries elsewhere that attribute LoveSong to Heartbreak/PartnerLoss are stale — see crates/er-sim/src/sim/systems/compose.rs for the current rules.
Source: crates/er-sim/src/sim/systems/compose.rs, Romance composition properties section.
Rebuilding After Scars
Scars cannot be removed, but their effect on an elf's life depends on what comes next.
- Maturation moves expressed values toward root, and root values are what scars shift. So the personality change is slow — see lifecycle. A heartbroken young elf shifts within a week of in-game time; an elder barely moves.
- New partnerships provide +10 satisfaction, enough to offset several scars' direct penalty.
- Friends, meaningful work, and aesthetic alignment keep satisfaction above departure threshold even as scars accumulate.
The sim models a specific emotional truth: damage is real and permanent, but it's not deterministic. An elf with five scars can still have a long, satisfying life — they'll just be different than the elf who arrived.
Tips
-
Watch for proud-and-miserable elves. Pride > 0.85 and morale < 40 after any argument is the EgoWound crisis window. 150 ticks to recover their mood before the scar locks in. A single kept friendship or a satisfying composition can save them.
-
Protect couples during prestige gaps. Prestige asymmetry feeds dissolution pressure; pressure ≥ 100 fires Heartbreak on both sides. If one partner is breaking out as Renowned and the other stays Emerging, consider leveling the trailing partner's revel exposure before the gap becomes decisive.
-
Betrayal is one-sided by design. When a partner starts courting someone else, the betrayed elf takes the full hit and the cheater walks. This is intentional — players should read infidelity as a moral event, not a symmetric breakup. But mechanically: the cheater is the one who survives unscarred, and the betrayed may never form another stable partnership.
-
Unrequited has a 200-tick deadline. A one-sided attraction that hasn't reached mutual warmth (≥30) within 200 ticks resolves as Unrequited. If you see a potential pairing that's stalled, the window to shift aesthetic alignment or geography is finite.
-
PartnerLoss compounds with Mourning. The -5 "Grieving" mood stacks with the -8 "Partnership ended" style grief; the scar is permanent and the boldness drop slows future recovery. Losing a partner to departure is the single hardest scar to recover from — a partner, a mood penalty, a boldness drop, and 300 ticks of active mourning, all at once.
-
Scars tell stories. Read the labels. An elf carrying "Scarred by the silence of Thalindra", "Love unmet by Celebwen", and "Lost Aerendir to the road" isn't just a set of lowered stats — they are a person with a specific emotional history. The sim remembers for you; let it show up in how you play them.