- Grow climax admit heat with arc age and re-stamp while theater holds - Let prolonged stranger fights challenge Cap so Active chrome can light - Add soak_probe that dumps roster vs focus without wiping saga state - Gate with saga_hard_arc_escalates; bump mod to 0.29.59
7.4 KiB
Life-saga roster
Dynamic top-10 cast of interesting lives (MCs). Owns the dossier rail and soft camera bias.
Chronicle stays a history book and never drives the camera.
Short combat/love/war arcs stay in StoryPlanner as chapter beats.
Durable observed facts live in LifeSagaMemory and survive roster churn.
Ownership
| Concern | Owner |
|---|---|
| Top-10 MCs, diversity, Prefer | LifeSagaRoster |
| Durable observed facts | LifeSagaMemory |
| Adaptive presentation | LifeSagaPresentation |
| Dossier / Saga tabs + hover preview | LifeSagaViewController |
| Saga body UI | LifeSagaPanel |
| Rail icons / Prefer click | LifeSagaRail |
| Camera read-pause lease | InterestDirector |
| Short climax → aftermath → epilogue | StoryPlanner (thinned) |
| Spine under tip | StoryPlanner.FormatSpineLabel |
| Full history | Chronicle / Lore |
Admission
Live discovery (no tip-string allowlists):
- Game favorite, king, city leader, kills/renown floors (
InterestScoring.IsNotable) - Pack alpha, clan chief, army captain, active plot author, founder, species singleton
Standing is recomputed from live roles each refill. Heat comes from chapter stamps / featured tips and decays with idle time. Each slot keeps its original admission reason even when its live role later changes. Hard-arc admissions also retain the arc kind and chapter context that brought the life onto the roster.
Dynamic top-10
- Cap stays 10; order follows Effective = Standing + Heat + pin bonuses.
- Prefer and WorldBox favorites are hard pins and fully count toward Cap.
- Admission-role units always compete on the periodic scan.
- Non-admission "nobodies" challenge Cap only via hard-arc chapter stamps (Combat / War / Plot / Love / Grief).
- Hard-arc admit heat escalates with climax age (re-stamped while the arc holds) so a prolonged stranger duel can displace dull Cap slots and light Active chrome.
- Soft
NoteFeaturedheats existing MCs only. - Newcomers need a small challenger margin over the weakest non-pin so the rail does not thrash.
Camera (soft)
- No rail camera lock. Prefer is a toggle soft-favorite for idle scoring.
- Score ladder: crisis ownership > active short-arc ownership > Prefer soft > MC soft > MC cast > CausalHeat.
nearTieEpsilon(8) picks #1 for ordinary gaps; Prefer/MC/cast may still win withinsagaNearTieEpsilon(28).- Soft ranks: Prefer > MC > MC cast (lover/friend/kin/earned rival of a roster MC).
- Tips that touch two or more roster MCs get
sagaCrossMcBonus. - Mid-fight follow uses Prefer/MC/cast soft weight in
CombatFocusWeight(spectacle floors can still win). - Ambient / character-fill yields immediately to Prefer/MC tips (not vs crisis/combat/short-arc holds).
- Soft-fill quiet still suppresses anonymous crumbs; Prefer/MC tips may break quiet.
- Glyph hover acquires a camera read-pause lease: feeds/story/roster continue, but selection and focus repair are deferred until release.
Rail UX
- Up to 10 slots with live inspect-UI sprites (refreshed ~3x/sec for animation frames).
- Egg forms and tiny/blank atlas crops fall back to the species icon (letter last).
- Active chrome = camera follow MC; Involved chrome = other tip-touched MCs (subject/related/follow/pair/short-arc cast only - not mass
ParticipantIds). - Prefer uses a star pip / distinct border.
- Click toggles saga Prefer (does not mutate WorldBox unit favorite).
- While on the Saga tab, click also pins that life as the persistent Saga subject (panel only; director bias stays Prefer/MC/cast).
- Tabs sit above the cast rail; the rail is a horizontal strip under the tabs so Dossier↔Saga body swaps cannot move the glyphs.
- Dossier shows the watched unit dossier; Saga shows the adaptive saga panel for the watched MC when on the roster.
- If the watched unit is not an MC and nothing is pinned, Saga shows an empty Pick a life from the rail state (never a stale first-roster filler).
- Hovering a glyph temporarily previews that life in the Saga body and pauses camera switching.
- Leaving the glyph restores the prior tab (usually Dossier) immediately and releases the pause lease.
- Hover-exit re-applies dossier reason/traits/status/history so the orange tip does not wait for a tip change.
- Moving onto the panel or empty rail chrome does not keep the preview - only glyph hover does.
- Relayout / glyph-to-glyph exits are ignored while the pointer is still over a glyph.
- Clicking a tab during hover cancels the preview immediately and applies that tab.
- Tabbed chrome locks a constant outer width so Dossier↔Saga hover cannot slide glyphs.
- Saga body is a story card: lens eyebrow + name + title beside the portrait; stake, Cast, and Legacy wrap full-width under it.
- No Evidence stats dump (kills/realm live on Dossier). No Open Lore button (press L).
- Body height sizes to content up to a cap; Legacy beats stack as separate lines (no · soup).
- Dossier story spine (
Kind · Phase) is hidden when the orange reason already names the same kind and phase is Climax. - Never show live task/status/trait rows or call a live attack target a rival.
Earned rivals
Notable only:
- Living rematches (≥
sagaRivalEncounterThreshold, default 3) while both are alive (sticky combat hook; kill/death do not count). - Kin blood (
killed_kin/kin_slain). - War / plot opposition (opposing principals on the same war/plot tip).
- MC↔MC living rematches earn rivalry one encounter sooner; a single MC kill is crossover Legacy, not automatic RivalEarned.
- Cast shows living credible rivals only; weak kill-cycle
repeated_encountersfacts are pruned. - Likely succession is omitted unless a game-authored heir API probe succeeds.
- Pack / kin lenses fill remaining Cast slots with live family peers (
Packmate/Kin) after lover/friend/parents/children/heir/rival.
Cross-MC moments
When subject and other are both roster MCs, facts are flagged McCrossover (named stake/legacy prose + heat on both).
Both rail glyphs light (Active + Involved) when the current tip touches multiple MCs.
Soft-fill quiet (AFK hygiene)
After hard story/crisis closers, soft-fill quiet suppresses soft-life crumbs and short interrupt FX (stunned / invincible).
FamilyPack does not break quiet (ambient cluster fill).
Combat / war / plot / outbreak / earthquake / story beats / epic strength / Prefer/MC still cut in.
Quiet can refresh briefly when a soft crumb ends (bounded).
Session
StoryPlanner.Cleardoes not wipe the roster or saga memory.- Lore browse / brief idle-off keeps the roster and memory.
- World replacement, harness batch end, and
interest_saga_clearwipe roster + memory. - Read-only soak dumps use
soak_probe(orsnapshotwithvalue=preserve) and skip the batch-end wipe.
Harness
saga_roster_diversitysaga_camera_prefers_mcsaga_prefer_soft_biassaga_wins_moderate_gapsaga_combat_follow_mcsaga_cast_soft_biassaga_cross_mc_lightsaga_cross_mc_killsaga_rival_not_single_killsaga_rival_rematchsaga_prefer_cuts_ambientsaga_hard_arc_escalatessaga_overview_has_mcsaga_adaptive_dossiersaga_memory_survivessaga_hover_read_pausesaga_replace_on_deathsaga_admit_rolessaga_replace_weakersaga_rail_active_highlightsaga_rail_prefer_clicksaga_soft_fill_no_pack
See also: story-planner.md.