Romance

Elves don't choose who to love. Attraction emerges from shared emotional experiences -- grief, transcendence, comfort in dark moments. Romance in your settlement is asymmetric, gradual, and deeply shaped by personality.

Overview

Each elf can hold up to 3 simultaneous attractions. Attractions accumulate warmth over time through shared experiences. When warmth crosses key thresholds, the relationship progresses through stages: attraction, courtship, and partnership. Partnerships can dissolve under aesthetic drift or status asymmetry, leaving permanent personality scars.

Romance runs on three tick systems:

  • Warmth accumulation (every 50 ticks)
  • Progression (every 50 ticks)
  • Dissolution (every 100 ticks)

Source: crates/er-sim/src/sim/systems/romance.rs -- romance_warmth_system, romance_progression_system, romance_dissolution_system.

How It Works

Warmth Sources

Warmth grows through shared emotional moments, not compatibility scores. Two elves must experience something together for attraction to build.

SourceWarmthCatalyst?Condition
Shared transcendence+8.0YesBoth loved the same composition at the last revel
Shared grief+6.0YesBoth mourning the same departed friend
Comfort in darkness+5.0YesOne elf's morale < 30, other within 3 tiles
Aesthetic resonance+2.0NoAesthetic distance < 0.25 AND friends
Slow burn+1.0NoFriends AND within 5 tiles

Catalyst events are special -- they don't just add warmth, they unlock the courtship transition. A spark without a catalyst stays as unacted attraction.

Source: crates/er-sim/src/sim/systems/romance.rs, romance_warmth_system -- catalyst flag set on SharedTranscendence, SharedGrief, ComfortInDarkness.

Personality Multipliers

All warmth gains are scaled by the attracted elf's personality:

PersonalityMultiplierEffect
Bold (boldness > 0.7)x1.3Falls faster
Cautious (boldness < 0.3)x0.6Falls slowly, carefully
Proud (pride > 0.7)x0.8Slightly guarded

A cautious, proud elf accumulates warmth at 0.6 x 0.8 = 48% of the base rate. A bold elf with low pride accumulates at 130%. Love is not equally distributed.

Source: crates/er-sim/src/sim/systems/romance.rs, romance_warmth_system -- Personality::sigmoid_effect applied to boldness/pride thresholds.

Progression Stages

StageThresholdRequirements
Attractionwarmth > 0Automatic when any warmth source fires
Courtshipwarmth >= 60.0Mutual warmth >= 60 AND catalyst within last 100 ticks
Partnershipwarmth >= 85.0Both courting each other AND both warmth >= 85

Courtship requires both elves to have warmth >= 60 for each other (mutual) and a recent catalyst event (within 100 ticks of the spark). One-sided warmth above 60 doesn't trigger courtship -- it starts the unrequited clock.

Partnership is the final stage. Only romance_progression_system creates partnerships; only romance_dissolution_system removes them. The Relationships::adjust method guards Partners from being reclassified by the normal social system.

Source: crates/er-sim/src/sim/systems/romance.rs, romance_progression_system -- COURTSHIP_THRESHOLD = 60.0, PARTNERSHIP_THRESHOLD = 85.0.

Unrequited Love

When one elf's warmth crosses 60 (spark) but the target's warmth stays below 30 for 200 ticks, the attraction resolves as unrequited:

  • An Unrequited personality scar is applied
  • Mood penalty: -5 for 150 ticks
  • The attraction is removed

This is one of the few ways scars form outside of partnership dissolution. A cautious elf who builds warmth slowly may carry unrequited scars from multiple failed attractions over a long game.

Source: crates/er-sim/src/sim/systems/romance.rs, romance_progression_system -- unrequited branch at 200 ticks after spark_tick.

Dissolution

Partnerships accumulate dissolution pressure over time. When pressure reaches 100.0, the partnership ends.

Pressure sources (per 100-tick cycle):

SourcePressureCondition
Aesthetic alienation(distance - 0.8) x 5.0Aesthetic distance > 0.8
Status asymmetry(gap - 0.3) x 3.0Prestige gap > 0.3
Partner is rival+10.0Relationship type = Rival

Patience modifier: all pressure is scaled by (1.5 - patience). A patient elf (patience = 1.0) scales pressure by 0.5x. An impulsive elf (patience = 0.0) scales by 1.5x.

Proximity repair: when partners are within 3 tiles, pressure decreases by up to -2.0 per cycle (minimum delta: -5.0). Keeping partners near each other physically slows dissolution.

Dissolution events:

TriggerScar TypeWho Gets Scarred
Betrayal (partner courting someone else)BetrayalOnly the betrayed elf
Aesthetic driftHeartbreakBoth elves
Prestige asymmetryHeartbreakBoth elves
Growing apartHeartbreakBoth elves

Betrayal is instant -- it doesn't wait for pressure to reach 100. If one partner begins courting a third elf, the partnership dissolves immediately.

Source: crates/er-sim/src/sim/systems/romance.rs, romance_dissolution_system -- pressure cap at 100.0, patience modifier at 1.5 - patience.

Partnerships carry origin markers — records of how the bond grew (apprenticeship, shared grief, rivalry-turned-love) that shift the dissolution threshold above or below baseline 100. A partnership with Apprenticeship and SharedCrisis origins dissolves at pressure 135, not 100; a RivalryToLove partnership dissolves at 90. When origin history saves a partnership from a pressure cycle that would have ended it at baseline, an OriginSavedPartnership event fires in the feed.

Values & Formulas

Warmth Timeline Example

Two bold friends (boldness > 0.7) who share a revel transcendence moment:

  1. SharedTranscendence: +8.0 x 1.3 = +10.4 (catalyst set)
  2. SlowBurn each 50-tick cycle: +1.0 x 1.3 = +1.3
  3. At cycle 39 (~1,950 ticks): warmth crosses 60.0 -- spark
  4. If mutual and catalyst within 100 ticks: courtship begins
  5. Continued SlowBurn + AestheticResonance: ~2.0-3.3 per cycle
  6. At ~cycle 58 (~2,900 ticks): warmth crosses 85.0 -- partnership

A cautious pair (x0.6) would take roughly twice as long to reach the same thresholds.

Dissolution Timeline Example

Partners with aesthetics drifting apart (distance = 0.9):

  • Pressure per cycle: (0.9 - 0.8) x 5.0 = 0.5
  • Patient elf (patience = 0.8): 0.5 x 0.7 = 0.35 per 100 ticks
  • Impulsive elf (patience = 0.2): 0.5 x 1.3 = 0.65 per 100 ticks
  • If not near each other: ~150-290 cycles (15,000-29,000 ticks) to dissolve
  • If near each other: repair of -2.0 per cycle far exceeds pressure -- stable

Aesthetic drift alone dissolves partnerships slowly. Add a prestige gap and the pressure compounds rapidly.

Interactions

Mood Effects

SituationMoodDuration
Near beloved (partner within 3 tiles)+550 ticks
Courting someone+5While courting
Unrequited resolution-5150 ticks
Publicly criticized by partner-480 ticks

Source: crates/er-sim/src/sim/systems/social.rs, social_mood_system -- "Near beloved" modifier.

Satisfaction

Romance contributes directly to satisfaction:

SituationSatisfaction
Has partner+10.0
Courting someone+5.0
Per scar-1.5
Unrequited attraction (active)-3.0

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

Composition Properties

Romance states unlock composition properties when an elf composes:

ConditionProperty
Has partner, partner satisfied (mood > 0)Contentment
Heartbreak scar AND currently unpartneredHeartbreak (+15 emotional)
Currently courtingLoveSong (+10 emotional)
Partner just departedElegy (compound property)
PartnerLoss scar for currently-mourned elf+10 emotional (no slot)

See Scars — Composition Properties for the full picture.

Source: crates/er-sim/src/sim/systems/compose.rs, compose_system -- partner contentment and scar-driven properties.

Tips

  • Shared transcendence is the strongest catalyst. Schedule revels with compositions that polarize the audience -- elves who both Love the same piece get +8 warmth and a catalyst flag. This is the fastest path to courtship.

  • Grief bonds are powerful. When an elf departs, watch who mourns together. Shared grief (+6, catalyst) can spark romances between elves who barely knew each other before the loss.

  • Keep partners near each other. Proximity repair (-2.0/cycle) counteracts mild aesthetic drift. Partners who work in the same zone are more stable than those assigned to opposite ends of the settlement.

  • Watch for unrequited spirals. A cautious elf (x0.6 warmth) paired with a bold elf (x1.3 warmth) can create asymmetric attraction -- the bold elf's warmth climbs past 60 while the cautious elf's is still at 35. The 200-tick unrequited clock starts for the bold elf.

  • Betrayal is instant and one-sided. If a partnered elf begins courting someone new, the existing partnership dissolves immediately. Only the betrayed elf gets the Betrayal scar. The betrayer walks away clean.

  • Scars accumulate. An elf who has been through two heartbreaks carries -3.0 satisfaction permanently. Three unrequited loves add another -4.5. Multiple scars can push an elf toward departure even if everything else is going well.