Fandom
Fandom turns audience reception into enduring social bonds. When an elf Loves a composition at a revel, they become a fan of the composer -- and fans shape the composer's creative life long after the revel ends. They boost the composer's social inspiration when nearby, slowly deepen their relationship over time, and occasionally wish aloud that the composer would make more work. Fandom is also the single largest contributor to prestige.
Overview
Every elf carries a Fandom memory tracking up to 5 composers whose work has moved them. The roster is built exclusively from Love reactions at revels -- not friendship, not proximity, not aesthetic alignment. To be someone's fan is to have loved their work, concretely, at a specific performance.
Once a fandom exists, the fandom_system applies its effects every 50 ticks.
A fan within 4 tiles of a composer they're a fan of:
- boosts the composer's social inspiration (+2),
- strengthens their own relationship with the composer (+1),
- and, on rare rhythmic intervals, emits a FanRequest cultural event.
These effects are small per tick but compounding. A composer who spends time near their fans accumulates social inspiration for future work and slowly turns fans into friends. A composer who never leaves their workshop gains none of the benefit, even if they have many fans on paper.
How It Works
Becoming a Fan
During a revel, when the audience reacts to a composition, each attendee's
reaction is computed from their aesthetic position relative to the piece. If an
attendee's reaction is Love and they are not the composer themselves, the
system calls record_love on that elf's Fandom component, passing the composer's
name and the current tick.
The threshold to form a fandom is one Love reaction. The first Love from a
non-self audience member immediately creates a fandom entry and fires a
FandomFormed cultural event. Subsequent Love reactions from the same fan
increment the entry's love_count but do not emit another event -- the fan is
already a fan.
| Trigger | Effect |
|---|---|
| First Love from fan X for composer Y (X != Y) | Creates FanOf { composer_name: Y, love_count: 1 }, emits FandomFormed { fan: X, composer: Y } |
| Subsequent Love from X for Y | Increments love_count (saturating at u8 max), no event |
| Love from the composer for their own work | Ignored -- no self-fandom |
Source: crates/er-sim/src/sim/systems/revel.rs, Love-reaction block around fandom.record_love(&comp.composer, tick); crates/er-sim/src/sim/components.rs, Fandom::record_love.
The 5-Fandom Cap
Each elf tracks at most 5 fandoms (MAX_FANDOMS = 5). When a sixth Love
would create a new entry, the system sorts the full list by love_count
(highest first) and truncates to 5. The weakest fandom -- the composer the elf
Loved the fewest times -- is pruned.
This means an elf's five fandoms are effectively their five most-Loved composers. An elf who Loves six different composers once each will lose one of them; the prune is deterministic (sort order) but the displaced composer is whichever tied entry landed at index 5 after sorting.
Fandoms do not decay on their own. The only way to lose a fandom is to be crowded out by a stronger one. This makes fandom memory asymmetric: easy to acquire (one Love), sticky until bumped.
Source: crates/er-sim/src/sim/components.rs, Fandom::record_love -- prune branch at self.fans_of.len() > Self::MAX_FANDOMS.
The Fandom Tick System
The fandom_system runs every 50 ticks (skipping tick 0). On each cycle, it
walks every elf with at least one fandom and checks distance to each composer
they're a fan of.
A composer within Manhattan distance 4 of the fan triggers three effects on that tick:
| Effect | Target | Magnitude | Saturation |
|---|---|---|---|
| Social inspiration boost | Composer | +2 | Saturating add (caps at u8 max) |
| Relationship strengthen | Fan's record of composer | +1 strength | Clamped in Relationships::adjust |
| Fan request | Cultural event | FanRequest { fan, composer } | Only when tick % 500 == 0 |
Multiple fandoms in range stack: a composer with three nearby fans gets +6 social inspiration that cycle. A fan with two nearby composer-idols boosts both. The effect is symmetric in that fans create value for composers, but asymmetric in flow -- only the composer's inspiration is touched, not the fan's.
The 50-tick cadence means fandom effects are slow and ambient rather than immediate. A fan moving in next door to their favorite composer will begin nudging the composer's inspiration within a handful of 50-tick cycles, not instantly.
Source: crates/er-sim/src/sim/systems/fandom.rs, fandom_system -- guard tick.is_multiple_of(50) && tick != 0, proximity check dist <= 4, effect application block.
Fan Requests
At ticks divisible by 500 -- roughly once per in-game day -- each in-range
fan/composer pair emits a FanRequest cultural event of the form "X wishes Y
would compose more." These are flavor events at EventPriority::Minor priority,
archived but not surfaced as popups.
Importantly, the request does not cause the composer to actually compose. It's narrative colour, not a task directive. The composer's own needs, aspirations, and policies still drive what they make and when. Fan requests are the atmospheric signal that fandom exists in the world -- gossip that this elf has admirers -- rather than a causal pathway.
Source: crates/er-sim/src/sim/systems/fandom.rs, FanRequest emission block at tick.is_multiple_of(500); crates/er-sim/src/sim/events.rs, FanRequest variant and EventPriority::Minor classification.
Values & Formulas
Key Constants
| Constant | Value | Role |
|---|---|---|
MAX_FANDOMS | 5 | Per-elf fandom roster cap |
| Fandom tick cadence | every 50 ticks (skipping 0) | Proximity scan and effect application |
| Proximity threshold | Manhattan distance ≤ 4 | Required for effects to apply |
| Social inspiration boost | +2 per in-range fan per cycle | Applied to composer Inspiration.social (saturating) |
| Relationship boost | +1 per in-range fandom per cycle | Applied to fan's Relationships entry for composer |
| Fan request cadence | every 500 ticks | FanRequest event emitted for each in-range pair |
Proximity Arithmetic
Manhattan distance is |fan.x - composer.x| + |fan.y - composer.y|. At
threshold 4, in-range tiles form a diamond around the composer:
. . X . .
. X X X .
X X C X X
. X X X .
. . X . .
Where C is the composer and X is an in-range tile. A fan anywhere in this
13-tile diamond contributes to the composer's inspiration that cycle.
In a typical settlement layout, this means fandom effects trigger when fans and composers share a clearing, a dining area, or an adjacent workshop -- everyday social spaces. It does not reach across large settlements or require deliberate pilgrimage.
Interaction with Prestige
Fandom is the largest single input to prestige. The formula is:
Prestige = (recent_loves x 5.0) + (fans x 10.0) + (compositions x 2.0) - decay
Each fan contributes +10 to the composer's colony-wide prestige score. Since a single Love reaction creates a fandom, and a single fandom is worth 2 Love reactions' worth of prestige, fandom formation is the moment a composer's audience reception crosses from ephemeral to durable reputation.
Because the 5-fandom cap is per-fan (not per-composer), a composer can accumulate arbitrarily many fans across the colony. A widely-loved composer easily reaches Renowned or Legendary tiers on fan count alone.
Interaction with Revel Scoring
Fandom does not directly shift revel scoring; reactions are computed from the attendee's aesthetic position relative to the composition, not from whether they're a fan. But fandom feeds back into revels indirectly:
- Composer inspiration from nearby fans (+2 social per cycle) accumulates into stronger compositions over time, which in turn produce more Love reactions at future revels, which in turn build more fandom.
- Relationship strengthening (+1 per cycle per nearby fandom) turns fans into friends, which feeds friendship-bonus dynamics elsewhere in the social fabric.
This is the core positive feedback loop for cultural celebrity: Loved work creates fans, fans create inspiration, inspiration creates more Loved work.
Strategy & Play
Reading the Fan Economy
- One Love is the only threshold that matters. You don't need a composer to blow the audience away -- a single "Love" reaction from a single attendee starts a fandom. Revels with diverse audiences are therefore efficient at spreading fandom: each attendee whose taste aligns can become a new fan.
- The 5-fandom cap is per-listener, not per-composer. An elf who has Loved 5 different composers is at capacity; their next Love for a new composer displaces their least-loved existing fandom. Mature cultures with many active composers will see fandom turnover, not just accretion.
- Fandoms stick until crowded out. There's no time-based decay on the Fandom component itself -- a fan who never sees their idol again still counts. This stabilises prestige for composers who've had breakthrough revels.
Layout Implications
Because the proximity threshold is Manhattan ≤ 4, settlement layout matters:
- Composer housing near social hubs (dining, gathering spots, revel grounds) maximises fan-adjacency, accelerating inspiration gain.
- Isolated workshops prevent fan-proximity effects even if the composer is widely Loved. A reclusive composer banks prestige (fans count colony-wide) but misses the inspiration and relationship compounding.
- Fan-heavy clearings become natural creative zones: the ambient +2 social inspiration per cycle from two or three nearby fans keeps a composer's inspiration full, enabling sustained output.
Reading FandomFormed and FanRequest Events
- FandomFormed appears in the revel recap and event log -- a one-shot "fan X became a fan of composer Y" signal. Track these to see which compositions are building durable audiences.
- FanRequest appears as ambient minor-priority events: "X wishes Y would compose more." These are indicators of ongoing cultural presence rather than action items. They do not change composer behaviour -- the composer still acts on their own aspirations.
Related Systems
- Revels -- where fandoms are formed. Love
reactions during performances create Fandom entries and
FandomFormedevents. - Prestige -- fandom is the highest-weighted input to prestige scoring (+10 per fan).
- Relationships -- fandom-driven proximity effects strengthen the fan's relationship with the composer, potentially escalating into friendship.
- Inspiration -- composers gain +2 social inspiration per cycle per in-range fan.
- Compositions -- compositions are the artefacts that, when Loved, create fans in the first place.