Cultural Movements

When a settlement's artistic life crosses certain thresholds, the simulation emits cultural milestone events: visible signals in the event feed that something larger than any single composition or elf has happened. These events mark when a composer's audience grows large enough to constitute a "school," when a genre is invented for the first time, or when a movement of like-minded elves crystallizes around shared loves.

This page covers three colony-level events:

  • SchoolFormed — a composer crosses 3 cumulative Love reactions. Implemented.
  • GenreInvented — a settlement's first anachronistic composition. Defined but not yet emitted.
  • MovementCrystallized — coalescence of co-loving elves into a named movement. Defined but not yet emitted.

All three are EventPriority::Notable -- they appear in the event feed and revel recap but do not pause the game. Their reach extends well beyond individual elves: each marks a moment where the colony's culture has, in some small or large way, taken on a new shape.

Source: crates/er-sim/src/sim/events.rs, variants SchoolFormed, GenreInvented, MovementCrystallized; priority classification in CulturalEvent::priority.

SchoolFormed

A composer becomes a "school" the moment their cumulative count of Love reactions received as a composer crosses 3. From that moment forward, they are an aesthetic attractor: nearby non-friend elves slowly drift toward their taste direction (see School Drift).

Formation Conditions

ConditionValue
TriggerComposer's Aspirations.love_reactions_received crosses SCHOOL_THRESHOLD
Threshold3 total Love reactions across the composer's career
FrequencyOne-shot — fires only on the transition from below to at-or-above 3
WhenDuring revel processing, immediately after a composition's audience reactions are tallied

The check is "was below threshold and is now at-or-above" -- so if a composer gets two Love reactions in one performance and they were already at 1, the event fires once for the threshold crossing, not twice.

Event Payload

FieldTypeDescription
composerStringName of the elf who became a school
love_countu8The composer's total Love reactions at the moment of formation (>= 3)

Display

"{composer} has become a legendary school ({love_count} loves)"

Terminology warning: The display string says "legendary school," but the threshold is just 3 Love reactions -- a very low bar. This is not related to the Legendary prestige tier (which requires score 81+). A school composer can be a brand-new arrival with an Unknown prestige tier and a single hit performance. See the aesthetic position page for further discussion of this naming collision.

Player Significance

A SchoolFormed event tells the player: this composer's work is now influencing other elves' aesthetic positions. Concretely:

  • Non-friend elves within 5 Manhattan tiles of the school composer drift toward the direction of the composer's aesthetic (relative to 0.5) by 0.008 per axis per day.
  • The composer's prestige score gets the same fan and Love-reaction inputs it always did -- SchoolFormed is a separate, parallel signal, not a prestige driver.
  • Schools tend to cluster: a school composer who keeps performing accumulates fans, the fans drift toward them aesthetically, and over time a coherent "movement" emerges around the school's chosen axis directions.

The event is the cue to start watching that part of the settlement for cultural identity formation.

Source: crates/er-sim/src/sim/systems/revel.rs -- emission at the was_below && asp.love_reactions_received >= SCHOOL_THRESHOLD branch around line 371; crates/er-sim/src/sim/systems/aesthetics.rs -- school drift behavior keyed to the same SCHOOL_THRESHOLD = 3 constant.

GenreInvented

A GenreInvented event would mark the moment a settlement composes its first anachronistic piece in a given genre family -- a cultural shock event celebrating that someone broke from the traditional and natural genres into something new (Jazz, Rock, Blues, Free Verse, and similar genre families described in the compositions reference).

Status: defined but not currently emitted. The event variant exists in CulturalEvent and would render in the event feed if produced, but no system in the codebase constructs it today. The 2026-03-16 art-data-files PRD explicitly defers it ("GenreInvented event deferred (noted as TODO)").

Intended Formation Conditions

Per the original game-mechanics specification:

"When an anachronistic piece is the settlement's first, emit GenreInvented."

The intended trigger is a per-settlement "first anachronistic genre" recognition: the system would need to track which genre families have been performed at least once in the settlement's history and fire the event the first time a composition lands in a previously-unseen anachronistic family.

Event Payload

FieldTypeDescription
genreStringName of the genre family invented (e.g., "Jazz")
inventorStringName of the elf whose composition triggered the event

Display (when implemented)

"{inventor} invented a new genre: {genre}!"

Why It's Worth Implementing

Anachronistic genres carry strong aesthetic signal -- they are the colony's break from tradition, the moment innovation overtakes inheritance. A first emission would be a real cultural milestone worth marking in feeds, and could plausibly factor into:

  • Arrival mechanics (new wanderers attracted by cultural novelty -- see the reputation-based arrival design noted in earlier handoffs).
  • Aspiration progress for innovation-leaning elves.
  • A potential Founder tag for the inventing composer (analogous to colony founders).

See the follow-up beads for the open implementation issue.

Source: crates/er-sim/src/sim/events.rs -- variant declaration only. Original design: docs/plans/2026-03-14-game-mechanics-spec.md line ~540 and docs/brainstorms/2026-03-16-art-data-files.md line ~63.

MovementCrystallized

A MovementCrystallized event would mark the formation of a named cultural movement: a coherent group of elves bound together by shared aesthetic loves strong enough to constitute a recognizable artistic faction within the colony.

Status: defined but not currently emitted. The event variant exists in CulturalEvent and would render in the event feed if produced, but no system in the codebase constructs it today. The full crystallization logic (co-love subset detection, movement naming, member tracking, mood bonuses, revel score modifiers) is unimplemented.

Intended Formation Conditions

Per the original game-mechanics specification:

"After 3+ revels, scan for co-loving subsets: ≥3 elves who LOVED ≥3 same compositions. Named from founding compositions: 'The Defiant Shadow School.'"

The intended pipeline:

  1. After every revel (once the colony has hosted at least 3 revels), scan the audience reaction history for co-loving subsets: groups of 3 or more elves who all gave Love reactions to the same 3 or more compositions.
  2. When such a subset is detected and not already constituting an existing movement, name the movement after one or more of its founding compositions (e.g., "The Defiant Shadow School" from compositions like "Defiant Nocturne" and "Shadow Aubade").
  3. Tag aligned elves with movement membership.
  4. Emit MovementCrystallized { name, member_count }.

Event Payload

FieldTypeDescription
nameStringName of the movement (e.g., "The Defiant School")
member_countu32Number of founding members at crystallization

Display (when implemented)

"A cultural movement has formed: {name} ({member_count} members)"

Intended Downstream Effects

The same specification documents the gameplay effects movements would have if implemented:

  • Mood bonus: aligned elves get "Part of a movement" +2 morale per 200 ticks.
  • Revel scoring modifier: at revels, movement-aligned compositions get +3 from aligned elves and -2 from opposed elves.
  • Patron interaction: the human director would be able to favorite or disfavor movements, shaping the colony's cultural arc.
  • Curator awareness: the AI advisor would surface movement formation as a notable event for player attention.

None of the above is wired today. A MovementCrystallized payload appears in test fixtures ("The Defiant School", 3 members) but only to exercise the display formatter -- no production code path produces one.

See the follow-up beads for the open implementation issue.

Source: crates/er-sim/src/sim/events.rs -- variant declaration only. Original design: docs/plans/2026-03-14-game-mechanics-spec.md lines ~600-606 and docs/prd/elf-revel-prd.md lines ~118-122.

How These Events Interact

Even though only SchoolFormed fires today, all three events were designed as stages of cultural emergence at increasing scale:

StageEventScopeTrigger
1. Recognition of a single composerSchoolFormedOne composer3+ Love reactions
2. Recognition of a genre breakthroughGenreInventedOne genre familyFirst anachronistic of its family
3. Recognition of a coherent audience factionMovementCrystallizedGroup of 3+ elvesShared multi-composition loves

A fully populated cultural-emergence pipeline would let a player watch their colony progress through these stages: a single compelling composer becomes a school, an experimental composition opens a genre, and eventually like-minded audience members coalesce into a recognizable movement around the new aesthetic. Today only the first step is operative.

  • Revels -- where Love reactions are tallied and where SchoolFormed is emitted. The intended trigger sites for GenreInvented and MovementCrystallized would also live here or in adjacent revel-processing logic.
  • Aesthetic Position — School Drift -- the simulation effect of becoming a school: nearby non-friends drift toward the school's aesthetic direction.
  • Compositions -- genre families, including the anachronistic family relevant to GenreInvented.
  • Prestige -- a parallel reputation system for composers; the Legendary prestige tier is unrelated to the "school" threshold despite the shared word in the SchoolFormed display string.
  • Fandom -- per-elf fan tracking; fandom contributes to prestige independently of school formation.

Follow-up Work

Two of the three events on this page are unimplemented design intent. Open beads track the gap so future cultural depth work can pick them up:

  • Revel-ris — implement GenreInvented emission: track first-seen genre families per settlement, fire on first anachronistic composition.
  • Revel-awc — implement MovementCrystallized detection and effects (epic): co-love subset scanning, movement naming, membership tracking, mood bonuses, revel-scoring modifiers, patron/curator hooks.

These are noted as TODO in the original PRD and game-mechanics spec but were never scheduled. If you're considering implementing either, see docs/plans/2026-03-14-game-mechanics-spec.md (~lines 540-606) for the original spec.