worldbox-observer-mod/docs/scoring-model.md
DazedAnon 3941dc33e5 feat(saga): bias director onto MCs and note cross-MC beats
- Prefer/MC/cast win moderate tip gaps; combat follow and ambient cut-in follow roster
- Dual-light rail when tip touches multiple MCs; record MC↔MC crossover memory
- Earn rivals only from rematches, kin, or war/plot opposition (not single kills)
- Add harness coverage for gap, cast, rival, cross-MC, and ambient cut paths
2026-07-22 05:22:16 -05:00

2.4 KiB

Scoring model

Global formula: IdleSpectator/scoring-model.json

Per-event inventory (strength + prose): IdleSpectator/event-catalog.json

Story commitment (arcs / aftermath / ledger): story-planner.md

  • scoring-model.json - margins, multipliers, rarity caps, soft-Duel / variety valve knobs
  • event-catalog.json - every authored event id (happiness, status, worldLog, plots, decisions, …)
    • Decisions use action (clause after "decides to …")
    • Most other domains use label
    • Happiness uses variantsWithRelated / variantsWithoutRelated
    • Optional species / character bonuses

Visual tracker (open beside chat): scoring-model canvas

Variety policy (0.28.28)

TotalScore = EventStrength + scaleBonus + char*w + visual*w + novelty*w.

Hard sticky combat (margin 50, MaxWatch 60) is only for Skirmish+ or notable-pair Duels.

Anonymous / single-notable Duels are soft sticky: MaxWatch 24, variety valve at 8s, yield to Story peers after 8s.

Founding tips come from new_city / new_kingdom meta outcomes, not decision intent.

Consecutive shows of the same variety arc (e.g. duel → duel) subtract repeatArcPenaltyPer from TotalScore (capped), resetting when a different arc is shown.

A rolling tip window also adjusts score by frequency: over-shown arcs lose up to arcOverSharePenaltyMax, rare/absent arcs gain up to arcUnderShareBoostMax, with an extra combat monopoly penalty above arcCombatShareTarget.

Fruit-bush foraging is fill-band strength so it does not crowd the camera.

Live combat holds the camera until the scrap goes cold (see who wins); variety peers cut after the fight ends.

Edit the weights block in scoring-model.json to change live scoring formula knobs.

Edit the story block for StoryPlanner / life-saga soft bias:

  • nearTieEpsilon / sagaNearTieEpsilon - ordinary vs Prefer/MC/cast pick bands
  • sagaMcWeight / sagaPreferWeight / sagaCastWeight / sagaCrossMcBonus - tip score soft bias
  • sagaRivalEncounterThreshold - living rematches before EarnRival

Edit event-catalog.json to change what each event is worth and what it says.

See also: life-saga.md, story-planner.md.