Personality

Every elf has a personality defined by three axes -- boldness, patience, and pride. These aren't static labels. Root values shift permanently through scars, while expressed behavior drifts gradually toward the new root through maturation. An elf who suffers heartbreak doesn't change overnight; they change over hundreds of ticks, slowly becoming more cautious.

Overview

Personality has two layers:

  • Root values (boldness, patience, pride): the elf's deep self. Only modified by scars. Set at birth/arrival and rarely change.
  • Expressed values: what the elf actually acts on. Nudged toward root values by maturation every 50 ticks. These are what other systems read.

Each axis ranges from 0.0 to 1.0, with 0.5 as neutral:

AxisLow (< 0.3)MidHigh (> 0.7)
BoldnessCautiousBalancedBold
PatienceImpulsiveBalancedPatient
PrideHumbleBalancedProud

The combination of all three axes defines an elf's gestalt -- a named archetype based on which octant of personality space they occupy.

Source: src/sim/components.rs, Personality struct -- root and expressed fields, PersonalityAxis enum.

How It Works

Gestalts

Every elf is assigned a gestalt based on whether each root axis is above or below 0.5. There are 8 gestalts, one for each corner of the personality cube:

BoldnessPatiencePrideGestalt
> 0.5> 0.5> 0.5IronCrowned
> 0.5> 0.5<= 0.5DeepRoot
> 0.5<= 0.5> 0.5FlameTouched
> 0.5<= 0.5<= 0.5WindWalker
<= 0.5> 0.5> 0.5StillWater
<= 0.5> 0.5<= 0.5RootCalm
<= 0.5<= 0.5> 0.5ThornKeeper
<= 0.5<= 0.5<= 0.5DewLight

Gestalt names appear in the elf detail view. They don't directly affect mechanics -- the three axis values do -- but they give a quick read on an elf's temperament.

Source: src/sim/components.rs, PersonalityGestalt enum and Personality::gestalt() method.

Generation

Founders (the starting elves) get personality values generated near the 8 corners:

  • Base: 0.85 (high) or 0.15 (low) per axis
  • Jitter: +/-0.1
  • This creates distinct personality clusters in your starting population

Arrivals use bimodal generation:

  • Each axis: 0.2 or 0.8 base (50% coin flip) + +/-0.1 jitter
  • This produces elves with strong personality leanings, not wishy-washy midpoints

Expressed values start equal to root values. Divergence only happens after scars shift the root.

Source: src/sim/components.rs, Personality::random_founder and arrival generation in src/sim/arrival.rs.

Maturation

Every 50 ticks, expressed values drift toward root values:

expressed += (root - expressed) x rate

The rate is age-dependent -- young elves reshape quickly, elders resist change. See Lifecycle & Aging for the full stage-by-stage breakdown:

StageConvergence RateBehavior
Young0.04 (4%)Visibly shifts within a few days of a scar
Prime0.02 (2%)Baseline; noticeable shift over ~10 days
Mature0.01 (1%)Slow adjustment; identity is largely set
Elder0.005 (0.5%)Nearly immovable; a late-life scar barely affects behavior

At the Prime rate of 2% per cycle, after a scar shifts a root value:

  • 500 ticks (~5 days): 82% of the way to the new root
  • 1,000 ticks (~10 days): 96% converged
  • 1,500 ticks (~15 days): effectively identical to root

Young elves reach the same convergence roughly twice as fast; Elder elves take roughly four times as long. Identity calcifies with age.

Source: crates/er-sim/src/sim/systems/mood.rs, personality_maturation_system; crates/er-sim/src/sim/components.rs, Stage::maturation_rate.

Sigmoid Effect

When personality values are read by other systems (romance warmth, social bonding, crisis triggers), they pass through a sigmoid function that compresses the middle and stretches the extremes:

if raw < 0.5:  2.0 x raw x raw
if raw >= 0.5: 1.0 - 2.0 x (1.0 - raw) x (1.0 - raw)
InputOutputEffect
0.00.0Extreme low preserved
0.250.125Middle compressed
0.50.5Neutral unchanged
0.750.875Middle compressed
1.01.0Extreme high preserved

This means personality only has strong mechanical effects at the extremes. An elf with boldness 0.4 vs 0.6 behaves almost identically. An elf with boldness 0.1 vs 0.9 behaves very differently.

Source: src/sim/components.rs, Personality::sigmoid_effect.

Personality Crises

Extreme personality values can trigger transient crisis states under certain conditions. The crisis system runs every 10 ticks. See Scars — Transient Crisis Markers for the full table and mechanics.

CrisisTriggerDurationLeaves Scar?
EgoWoundargument AND pride > 0.85 AND morale < 40150 ticksYes — EgoWound scar
Withdrawalboldness < 0.15 AND company > 80200 ticksNo
RecklessAbandonpatience < 0.15 AND stalled aspiration100 ticksNo
LongPatienceBrokenargument AND patience > 0.85 (10% chance)50 ticksNo

Only EgoWound leaves a permanent scar when it expires. The others resolve without lasting personality change — the elf rode out the weather.

Source: crates/er-sim/src/sim/systems/social.rs, conflict_system (EgoWound / LongPatienceBroken triggers) and personality_crisis_system (Withdrawal / RecklessAbandon triggers, all four expiries).

Scars

Scars are permanent modifications to root personality values — the one mechanism that actually moves root axes after character generation. Each scar applies a small axis shift (clamped to 0.05-0.95), carries a narrative label, and costs -1.5 satisfaction forever.

Five scar kinds exist: Heartbreak, EgoWound, Betrayal, Unrequited, PartnerLoss. Four of five shift boldness downward — emotional loss makes elves cautious.

For full details — formation conditions, root-shift values per scar, events, composition interactions, and the boldness-erosion spiral that pushes elves toward departure — see the dedicated Scars page.

Source: src/sim/components.rs, PersonalityScar struct, ScarKind enum, Personality::apply_scar.

Values & Formulas

Satisfaction Bonuses by Personality

The satisfaction system applies personality-specific bonuses every 10 ticks:

PersonalityBonusCondition
Bold (> 0.7)+0.05 per friend above 3Rewards social boldness
Cautious (< 0.3)+0.05 per solitude inspirationRewards introspection
Patient (> 0.7)+0.1 per completed aspirationRewards long-term goals
Impulsive (< 0.3)+0.05 per compositionRewards prolific creation
Proud (> 0.7)prestige_tier x 0.03Rewards status
Humble (< 0.3)+0.05 per friend (cap 4)Rewards community

Source: crates/er-sim/src/sim/systems/satisfaction.rs, satisfaction_system -- personality bonus section.

Personality Effects Across Systems

SystemBoldness EffectPatience EffectPride Effect
Romance warmthx1.3 (bold) / x0.6 (cautious)--x0.8 (proud)
Romance dissolution--Pressure x (1.5 - patience)--
Revel absence< 0.3: may skip revel--> 0.8: may skip out of pride
Social bondingVia Social axis----
Crisis: Withdrawal< 0.15 triggers----
Crisis: Reckless Abandon--< 0.15 triggers--

Interactions

Departure Risk

Scars push elves toward departure through two channels:

  1. Direct satisfaction penalty: -1.5 per scar
  2. Boldness erosion: Heartbreak, Betrayal, and PartnerLoss all reduce boldness. Lower boldness means slower romance warmth accumulation (x0.6), making it harder to form new partnerships -- which would provide +10 satisfaction.

An elf who suffers multiple romantic losses enters a downward spiral: scars reduce satisfaction, boldness erosion makes recovery harder, and departure becomes increasingly likely.

Composition Properties

Personality influences composition through crisis states and scars:

  • Heartbreak scar + currently unpartnered: unlocks the Heartbreak property (raw emotional art, +15 emotional)
  • PartnerLoss scar + actively mourning same person: +10 emotional boost (no property slot — it's a resonance)
  • Currently courting (not a scar): unlocks the LoveSong property

Revel Behavior

Personality drives revel attendance decisions. During the gathering phase, elves with extreme personality values may choose not to attend:

  • Cautious (boldness < 0.3): "chose the forest over the fire"
  • Proud (pride > 0.8): "refused to attend -- if they don't want their art, they don't want their festival"

These absences generate RevelAbsence events in the log.

Tips

  • Read the gestalt, but watch the axes. IronCrowned tells you an elf is bold+patient+proud, but the specific values matter. An IronCrowned at (0.55, 0.55, 0.55) behaves very differently from one at (0.95, 0.95, 0.95) due to the sigmoid effect.

  • Scars are permanent but slow-acting. After a heartbreak, the elf's expressed boldness doesn't drop for days. Use the maturation window to stabilize them -- place them near friends, give them meaningful work.

  • Cautious elves are fragile. They accumulate romance warmth at 60% rate, making courtship slower. If their partner leaves, the PartnerLoss scar pushes boldness even lower. A formerly cautious elf with two PartnerLoss scars may never form another partnership.

  • Proud elves resist romance. The x0.8 warmth multiplier for pride > 0.7 means proud elves take longer to fall in love, but their partnerships are no more stable than anyone else's. A proud elf who does partner up is just as vulnerable to dissolution from aesthetic drift.

  • EgoWound is the only scarring crisis. A proud elf (pride > 0.85) whose morale drops below 40 after an argument enters an EgoWound crisis — 150 ticks. If it expires, they gain a permanent EgoWound scar (pride +0.03, patience -0.05). Withdrawal, RecklessAbandon, and LongPatienceBroken all expire silently. See Scars — Transient Crisis Markers.