Files
TheriapolisV3/theriapolis-rpg-reputation.md
Christopher Wiebe b451f83174 Initial commit: Theriapolis baseline at port/godot branch point
Captures the pre-Godot-port state of the codebase. This is the rollback
anchor for the Godot port (M0 of theriapolis-rpg-implementation-plan-godot-port.md).
All Phase 0 through Phase 6.5 work is included; Phase 7 is in flight.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-30 20:40:51 -07:00

36 KiB
Raw Permalink Blame History

Theriapolis — Faction Influence & Reputation System

Technical Design Document


Executive Summary

The reputation system tracks how the world perceives the Player Character across three nested layers: Clade Bias (what you are), Faction Standing (what your group has done), and Individual Disposition (what you've done to me personally). These three layers blend into a single Effective Disposition score for every NPC the player interacts with.

The core principle: Nobody meets you clean. Every NPC has opinions before you walk through the door. Your species, your Clade, the factions you're associated with, the rumors that precede you — all of it colors the interaction before a single word is exchanged. Personal experience can override prejudice, reinforce it, or complicate it.



SECTION I: THE THREE LAYERS


Layer 1: Clade Bias

What It Represents

The deep, biological, cultural, historical weight of being what you are. A wolf-folk walking into a Cervid herd-city carries ten thousand years of predator/prey history on their shoulders. A hybrid walking anywhere carries stigma. This layer exists before the game begins and changes slowly, if at all.

Implementation

Every NPC has a Clade Bias Table — a set of modifiers based on the PC's Clade and species. These are NOT stored per-NPC individually (that would be wasteful). They are inherited from the NPC's Bias Profile, which is determined by the NPC's own Clade, cultural background, region, and education level.

Bias Profiles are templates. A finite set (3050) covers the population:

Profile ID Description Example NPCs
CANID_TRADITIONALIST Pack-loyal, distrusts non-Canidae, respects strength hierarchy Rural wolf-folk rancher, Old Pack sympathizer
CERVID_CAUTIOUS Default wariness of predator Clades, warm to other prey, uncertain about hybrids Herd-city shopkeeper, Cervid farmer
URBAN_PROGRESSIVE Reduced Clade bias across the board, mild positive toward hybrids, dislikes extremists Sanctum Fidelis professional, university-educated
HYBRID_SURVIVOR Strong positive toward hybrids, default distrust of purebreds, especially authorities Tangles resident, underground network member
MUSTELID_PRAGMATIST Judges by utility, mild distrust of large species (Ursidae, Bovidae), respects competence Factory foreman, independent trader
BOVID_HERD_LOYALIST Warm to other Bovidae and prey Clades, wary of predators, protective of community Herd-city elder, agricultural cooperative member
COVENANT_FAITHFUL Treats all Clades with studied neutrality, strong negative toward Covenant violators Covenant Enforcer, Bridge-oath Keeper
FRONTIER_NIHILIST Doesn't care what you are, only what you can do right now Borderland stray, Tangles smuggler

Each profile contains a modifier table:

CERVID_CAUTIOUS bias table:
  Canidae:     -15
  Felidae:     -20
  Mustelidae:  -10
  Ursidae:     -25  (biggest = scariest)
  Cervidae:    +15
  Bovidae:     +10
  Leporidae:   +5
  Hybrid:      -10

These are the starting modifiers applied to the Effective Disposition calculation before anything else.

Clade Bias Modifiers — Additional Factors

Species-Specific Adjustments: Within a Clade, species matters. The base Clade bias is adjusted:

If NPC profile = CERVID_CAUTIOUS and PC species = Fox-folk:
  Base Canidae bias: -15
  Fox-folk adjustment: +5 (smaller, less threatening than wolf-folk)
  Net: -10

If PC species = Wolf-folk:
  Base Canidae bias: -15
  Wolf-folk adjustment: -5 (apex predator, maximum threat profile)
  Net: -20

Species adjustments are small (±5 to ±10) but meaningful at thresholds.

Size Differential: A Large PC interacting with a Small NPC triggers an additional modifier based on the size gap. This is involuntary — the NPC's body responds to the size differential before their brain catches up.

Size differential modifiers:
  Same size:         +0
  One step larger:   -3  (PC is bigger)
  Two steps larger:  -8  (PC is much bigger)
  One step smaller:  +2  (PC is smaller, less threatening)
  Two steps smaller: +5  (PC is much smaller, non-threatening... or patronized)

A moose-folk PC talking to a rabbit-folk shopkeeper starts at -8 from size alone, before Clade bias, before anything personal. That's the world.

Hybrid Detection: If the PC is a hybrid and the NPC detects it (through scent, visual tells, or reputation), an additional HYBRID modifier applies from the NPC's bias profile. If the PC is passing and the NPC hasn't detected it, the hybrid modifier does NOT apply — the PC is treated as their presenting Clade.

Discovery of passing status triggers a Betrayal Event (see Section IV).


Layer 2: Faction Standing

What It Represents

How the PC is perceived based on their affiliation with (or opposition to) organized groups. Faction Standing is communal reputation — it follows you through the world via rumor, news, official records, and scent-marked territory.

The Factions

The system tracks standing with the following factions:

Faction Description Standing Range
Covenant Enforcers The law. Federal authority. Policing the Covenant. -100 to +100
The Inheritors Predator-Clade supremacist network. -100 to +100
The Thorn Council Prey-Clade separatist movement. -100 to +100
The Maw (hidden) The umbrella conspiracy. PC learns about it progressively. -100 to +100
Hybrid Underground Informal mutual aid and rights network. -100 to +100
The Unsheathed Hybrid political activism movement. -100 to +100
Merchant Guilds Trade, commerce, economic power. -100 to +100
Local Government Per-settlement authority. Independent per settlement. -100 to +100 (per settlement)

Standing Scale:

Range Label Effect
-100 to -76 NEMESIS Kill on sight. Bounties. Active hunting.
-75 to -51 HOSTILE Attacked if recognized. No services. Arrest warrants.
-50 to -26 ANTAGONISTIC Refused service. Information denied. Reported to authorities.
-25 to -1 UNFRIENDLY Cold reception. Higher prices (+25%). Limited dialogue.
0 NEUTRAL Default. No opinion. Standard interactions.
+1 to +25 FAVORABLE Slight discount (-10%). More dialogue options. Tips and rumors.
+26 to +50 FRIENDLY Discount (-20%). Side quest access. Safe houses.
+51 to +75 ALLIED Significant discount (-30%). Faction resources available. Backup in combat.
+76 to +100 CHAMPION Maximum benefits. Leadership-level access. Faction NPCs will die for you.

How Standing Changes

Direct Actions: Completing quests, making story choices, killing faction members, saving faction members, delivering intelligence — these produce Standing Events with defined magnitude:

Action Magnitude Example
Minor favor +3 to +5 Delivered a package, shared non-critical info
Moderate service +8 to +12 Completed a faction quest, saved a member
Major service +15 to +25 Disrupted an enemy operation, saved a leader
Critical contribution +30 to +50 Resolved a faction-threatening crisis
Minor offense -3 to -5 Refused a request, associated with rivals
Moderate offense -8 to -12 Failed a faction quest, harmed a member
Major betrayal -15 to -25 Killed a member, sabotaged operations
Critical betrayal -30 to -50 Destroyed a faction asset, turned over intel to enemies

Faction Interdependencies: Some factions are opposed. Gaining standing with one costs standing with another:

FACTION OPPOSITION MATRIX:

                    Enforcers  Inheritors  Thorn   Hybrid_UG  Unsheathed  Merchants
Enforcers              —         -0.3      -0.3     -0.1        0.0         +0.1
Inheritors           -0.5          —       -0.2     -0.3       -0.3         0.0
Thorn Council        -0.5        -0.2        —      -0.1       -0.2         0.0
Hybrid Underground   -0.1        -0.5      -0.3       —        +0.3         0.0
Unsheathed            0.0        -0.5      -0.3     +0.3         —          0.0
Merchants            +0.1         0.0       0.0      0.0        0.0          —

Reading: when the PC gains +10 with the Inheritors, they lose 0.5 × 10 = -5 with the Covenant Enforcers, -2 with the Thorn Council, -3 with the Hybrid Underground, and -3 with the Unsheathed.

The multipliers are asymmetric by design. Helping predator supremacists hurts you more with the Hybrid Underground (-0.3) than helping the Hybrid Underground hurts you with the Enforcers (-0.1). The oppressed are more sensitive to betrayal than institutions are to dissent.

Faction Standing Propagation

NPCs don't psychically know your faction standing. Information travels through believable channels:

Propagation Speed:

  • Within a settlement where the action occurred: immediate
  • To adjacent settlements (1-2 day travel): 13 in-game days
  • Across the continent: 12 in-game weeks (thumper-relay and rail-carried news)
  • To isolated/frontier areas: may never arrive without specific courier

Propagation Fidelity: Standing events degrade as they propagate:

At origin:          Full magnitude
Adjacent settlement: 80% magnitude
Regional:           60% magnitude
Continental:        40% magnitude
Frontier:           20% magnitude (if it arrives at all)

Example: PC saves a Covenant Enforcer in Thornfield (+15). In Thornfield, their Enforcer standing is immediately +15. In a nearby town: +12. In Sanctum Fidelis (continental): +6. In The Tangles (frontier, plus Enforcers have weak presence): +3, and only if a courier happened to carry the news.

Exception — NEMESIS and CHAMPION standing: Extreme standing events propagate at full magnitude and maximum speed. Kill a faction leader, and everyone in that faction knows within days. Save a city from destruction, and the entire continent hears by next week. Fame and infamy travel fast.

Scent-Based Faction Detection: In settlements with strong faction presence, faction-aligned NPCs can SMELL the PC's recent associations. Spent time in an Inheritor camp? You carry traces. Stayed at a Hybrid Underground safe house? Scent residue. This creates an additional detection mechanism beyond rumor propagation.

Scent-based faction detection:
  Duration:  Scent traces last 2472 hours depending on exposure
  Detection: NPCs with Superior Scent or Scent-Broker abilities auto-detect
  Others:    WIS (Perception) DC 15 to notice "something off" about the PC's scent
  Counter:   Scent-mask products suppress faction scent traces
             Military-grade: 8 hours suppression
             Deep-cover: 24 hours

Layer 3: Individual Disposition

What It Represents

How a specific NPC feels about the PC based on direct personal interaction. This is the layer that makes the shopkeeper who hates Canidae warm up to the wolf-folk PC who saved her kit from drowning. Personal experience is the strongest force in the system — it can override Clade bias and faction standing, though doing so takes sustained effort.

Implementation

Every NPC the PC has directly interacted with stores a Personal Disposition Record:

PersonalDisposition {
    npc_id:           unique identifier
    base_value:       0 (initialized at first interaction)
    current_value:    integer (-100 to +100)
    interaction_log:  [array of InteractionEvents]
    trust_level:      enum (STRANGER, ACQUAINTANCE, FAMILIAR, TRUSTED, BONDED)
    memory_flags:     [set of memorable event tags]
    betrayal_flag:    boolean (has the PC betrayed this NPC specifically?)
    last_interaction: timestamp
}

How Individual Disposition Changes

Interaction Events: Every meaningful exchange with an NPC generates an InteractionEvent:

InteractionEvent {
    type:       enum (DIALOGUE, QUEST, GIFT, COMBAT, BETRAYAL, RESCUE, TRADE, SCENT)
    magnitude:  integer (-50 to +50)
    context:    string (what happened)
    timestamp:  game time
}

Event Types and Typical Magnitudes:

Event Magnitude Example
Polite greeting +1 First meeting, respectful dialogue
Helpful dialogue +2 to +3 Answering questions, sharing non-sensitive info
Small favor +3 to +5 Delivered an item, helped with a minor task
Significant help +8 to +12 Completed a personal quest, defended them
Life-saving +15 to +25 Rescued from danger, provided critical medical aid
Gift (appropriate) +2 to +8 Item value and relevance to NPC determine magnitude
Gift (inappropriate) -1 to -3 Wrong item, insulting implication, cultural misstep
Successful persuasion +1 to +3 Convinced them of something, but they know they were persuaded
Failed intimidation -5 to -10 Tried to bully them, failed. They remember.
Successful intimidation -3 to -8 Got what you wanted. They resent it.
Theft (detected) -15 to -25 Caught stealing. Trust collapses.
Theft (undetected) +0 They don't know. But if discovered later: magnitude doubles as betrayal.
Physical harm -20 to -40 Attacked them or someone they care about.
Witnessed violence -5 to -15 They saw you kill or brutalize someone. Context matters.
Witnessed mercy +5 to +10 They saw you spare someone or de-escalate.
Broke promise -10 to -20 Said you'd do something, didn't.
Kept difficult promise +10 to +15 Did what you said, even when it cost you.
Shared vulnerability +5 to +8 Revealed personal information, showed trust.

Trust Level

Trust is a ratchet-like system that tracks depth of relationship independently from disposition value. You can like someone you don't trust. You can trust someone you don't like.

Trust Level Threshold Unlocks
STRANGER Default Basic transactions, surface dialogue
ACQUAINTANCE 3+ positive interactions Extended dialogue, rumor sharing, basic side quests
FAMILIAR 8+ positive interactions, disposition > +15 Personal backstory dialogue, discounts, warnings about danger
TRUSTED 15+ positive interactions, disposition > +30, no betrayal flag Secret sharing, faction introductions, personal quests, safe house access
BONDED 25+ positive interactions, disposition > +50, TRUSTED for 5+ in-game days Will fight for the PC, share critical info unprompted, risk their life, romance options (if applicable)

Trust Decay: Trust does NOT decay passively. Once earned, it persists unless violated. However, disposition CAN decay (see Section III), and if disposition drops below the trust level's threshold while trust is high, the NPC enters a Conflicted state — they trust you but don't currently like you. This produces unique dialogue: "I know you're good underneath whatever this is. Don't make me wrong."

Trust Destruction: A betrayal event (see Section IV) can shatter trust instantly, dropping it by 13 levels depending on severity. Rebuilding shattered trust requires roughly double the interaction investment of building it originally. Some NPCs have a one-strike flag — betray them once and BONDED/TRUSTED is permanently inaccessible. These NPCs are marked in their design notes.



SECTION II: BLENDING THE LAYERS — EFFECTIVE DISPOSITION

The Formula

When the PC interacts with an NPC, the system calculates an Effective Disposition that determines the NPC's behavior:

EffectiveDisposition = (CladeBias × BiasWeight)
                     + (FactionStanding × FactionWeight)
                     + (IndividualDisposition × IndividualWeight)

Dynamic Weighting

The weights are NOT fixed. They shift based on the NPC's trust level with the PC. This is the key insight: personal experience gradually overrides prejudice, but only if you invest in the relationship.

Trust Level BiasWeight FactionWeight IndividualWeight
STRANGER 0.50 0.40 0.10
ACQUAINTANCE 0.35 0.35 0.30
FAMILIAR 0.20 0.25 0.55
TRUSTED 0.10 0.15 0.75
BONDED 0.05 0.05 0.90

Reading this table: When the PC first meets a stranger, Clade bias is 50% of the equation and personal experience is only 10%. The shopkeeper who's never met a wolf-folk is basically responding to wolf-folk-ness, not to YOU. But by the time you've reached TRUSTED, personal experience is 75% of the equation — the shopkeeper has largely overridden her species-level wariness because YOU specifically have proven yourself.

"Largely" is the key word. Even at BONDED, Clade bias is still 5%. It never fully disappears. That's the world. The prejudice gets quiet, but it doesn't die. A BONDED Cervid NPC who adores the wolf-folk PC will still flinch, once in a while, at a sudden movement. That 5% is ten thousand years of evolutionary memory.

Example Calculation

Setup:

  • PC: Wolf-folk (Canidae)
  • NPC: Cervid shopkeeper, CERVID_CAUTIOUS bias profile
  • Covenant Enforcer standing: +20 (FAVORABLE)
  • NPC has no faction affiliation (uses a blended average of factions weighted by local presence — in a Covenant-strong area, Enforcer standing matters most)
  • Trust Level: ACQUAINTANCE (6 interactions, all positive)
  • Individual Disposition: +12

Clade Bias: CERVID_CAUTIOUS → Canidae: -15, Wolf-folk adjustment: -5 = -20

Faction Standing (local blend): Settlement is moderate Covenant presence (60% weight) + low Merchant Guild presence (30%) + negligible others (10%). PC Enforcer standing: +20 × 0.6 = +12 PC Merchant standing: 0 × 0.3 = 0 Blended local faction = +12

Individual Disposition: +12

Weights at ACQUAINTANCE: Bias 0.35, Faction 0.35, Individual 0.30

Effective = (-20 × 0.35) + (+12 × 0.35) + (+12 × 0.30)
          = (-7.0) + (4.2) + (3.6)
          = +0.8

Result: Barely positive. The shopkeeper is civil. Not warm. The wolf-folk's Clade identity is dragging the score down, the Enforcer reputation and personal experience are pulling it up, and the whole thing lands at approximately neutral with a thin positive edge. Three more good interactions and it'll feel genuinely friendly. One bad one and it tips cold.

That knife-edge is the player experience. Every interaction matters because the math is always close.



SECTION III: DISPOSITION DECAY AND MEMORY

Passive Decay

Individual disposition decays slowly toward a resting point when the PC hasn't interacted with an NPC for an extended period.

Resting Point Calculation: The resting point is NOT zero. It's the NPC's baseline opinion accounting for what they've heard but haven't experienced:

RestingPoint = (CladeBias × 0.5) + (FactionStanding × 0.3)

This means a wolf-folk PC with strong Enforcer standing has a positive resting point with law-abiding NPCs and a negative one with outlaws, even for NPCs they've never met. The world has an opinion about you before you arrive.

Decay Rate: Individual disposition moves toward the resting point at a rate of:

decay_per_day = (current_disposition - resting_point) × 0.02

Slow. 2% of the gap per day. A disposition of +50 with a resting point of 0 drops to +49 after one day, +40 after about 25 days. The PC would need to be gone for months for a strong relationship to decay meaningfully.

Decay Floor by Trust Level: Trust provides a decay floor — disposition cannot decay below a minimum determined by trust:

Trust Level Minimum Disposition (Decay Floor)
STRANGER No floor (full decay)
ACQUAINTANCE -10 (won't drop below -10 from decay alone)
FAMILIAR +5 (relationship sustains mild positivity)
TRUSTED +20 (strong relationships persist)
BONDED +40 (bond endures long absence)

This means a BONDED NPC will still be solidly positive even if the PC disappears for an entire act. They trust you. Absence doesn't erase that. But a STRANGER's fleeting good impression fades to the resting point within weeks.

Memory Flags

NPCs remember specific events via Memory Flags — tagged records of notable interactions that can be referenced in dialogue and affect future calculations:

MemoryFlag {
    tag:        string ("SAVED_MY_CHILD", "STOLE_FROM_ME", "SHARED_DRINK",
                        "FOUGHT_TOGETHER", "SAW_KILL_UNARMED", "KEPT_SECRET")
    magnitude:  the original event's magnitude (preserved, doesn't decay)
    timestamp:  when it happened
    referenced: how many times this memory has surfaced in dialogue
}

Memory Flags serve three purposes:

  1. Dialogue Triggers: NPCs reference past events naturally. "You helped my daughter. I haven't forgotten." / "Last time you were here, coin went missing from my till. I'm watching you."

  2. Disposition Anchors: Certain flags prevent disposition from decaying past a threshold regardless of trust level. SAVED_MY_CHILD sets a permanent floor of +15 with that NPC. STOLE_FROM_ME sets a permanent ceiling of +10 until explicit amends are made.

  3. Reputation Seeds: NPCs talk to each other. A memory flag on one NPC can propagate to connected NPCs as a rumor (see Section V), creating pre-disposition with NPCs the PC hasn't met yet.



SECTION IV: BETRAYAL MECHANICS

Betrayal is special. It doesn't just subtract points — it fundamentally restructures the relationship.

What Constitutes Betrayal

A Betrayal Event fires when the PC performs an action that violates the specific trust an NPC has placed in them. Magnitude scales with trust level — the more they trusted you, the worse it hurts.

Action Betrayal at STRANGER? Betrayal at BONDED?
Steal from them No (just theft) Yes
Lie to them (detected) No (just deception) Yes
Harm someone they love Yes (at any level) Yes (magnified)
Reveal their secret N/A (they wouldn't share) Yes (devastating)
Break a promise Mild offense Yes
Discovered passing (hybrid PC) N/A Yes (complex — see below)
Side with their faction's enemy N/A (no investment) Yes

Betrayal Damage Formula

betrayal_damage = base_event_magnitude × trust_multiplier

Trust multipliers:
  STRANGER:      1.0× (normal event processing)
  ACQUAINTANCE:  1.5×
  FAMILIAR:      2.0×
  TRUSTED:       3.0×
  BONDED:        5.0×

A stolen item is -15 from a stranger but -75 from a bonded companion. They didn't just lose an item. They lost faith.

Trust Collapse

Betrayal events also drop trust:

Betrayal Magnitude Trust Drop
Minor (< 15 effective) -1 level
Moderate (1530) -2 levels
Severe (3150) -3 levels (to STRANGER minimum)
Catastrophic (51+) To STRANGER + Trust Lock

Trust Lock: After a catastrophic betrayal, the NPC's trust is locked at STRANGER for a minimum of 30 in-game days. During the lock period, positive interactions still accumulate individual disposition but cannot advance trust. After the lock expires, trust can be rebuilt — slowly, at double the normal interaction investment.

Some NPCs have a permanent lock flag for specific betrayals. Whisper, if betrayed, will never trust the PC again. Period. That design decision reflects the character's history: they've been betrayed by institutions their entire life. One more betrayal from someone they actually chose to trust is the last.

The Passer Discovery Special Case

If the PC is a passing hybrid and an NPC discovers this, a Passer Discovery Event fires. This is NOT always a betrayal — it depends on the NPC:

Passer Discovery Processing:
  
  1. Check NPC bias profile for HYBRID modifier
     If HYBRID modifier > 0 (hybrid-friendly):
       Process as SHARED_VULNERABILITY (+5 to +10)
       "You trusted me with this. That means something."
  
  2. If HYBRID modifier < -10 (strongly anti-hybrid):
       Process as BETRAYAL
       Magnitude = |HYBRID modifier| × trust_multiplier
       "Everything about you was a lie."
  
  3. If HYBRID modifier between -10 and 0 (mildly uncomfortable):
       Process as COMPLICATED_REVELATION
       Disposition: -5 to -15 (discomfort, recalibration)
       Trust: frozen for 7 days while NPC processes
       After freeze: trust continues from current level
       "I need... I need some time with this."
  
  4. Regardless of above: NPC's Clade Bias recalculates using
     HYBRID modifier instead of presenting-Clade modifier
     This can shift Effective Disposition significantly

The Passer Discovery system means that a hybrid PC's choice to pass or reveal is mechanically meaningful and contextually variable. Some NPCs become closer. Some become enemies. Most need time. That's the world.



SECTION V: RUMOR PROPAGATION AND SOCIAL NETWORKS

How NPCs Talk About You

Individual NPCs don't exist in isolation. They have social connections — family, friends, colleagues, customers, neighbors. When the PC does something notable, the affected NPC tells people.

NPC Social Graph

Each settlement contains a lightweight social graph:

NPCSocialNode {
    npc_id:         unique identifier
    connections:    [array of {npc_id, relationship_type, weight}]
    gossip_tendency: float (0.0 to 1.0 — how likely to spread information)
    influence:       float (0.0 to 1.0 — how much their opinion sways others)
}

Relationship Types:

  • FAMILY (weight: 0.9 — family opinions carry heavy)
  • CLOSE_FRIEND (weight: 0.7)
  • COLLEAGUE (weight: 0.4)
  • ACQUAINTANCE (weight: 0.2)
  • RIVAL (weight: 0.3, but INVERTED — if a rival dislikes the PC, their rivals like the PC more)

Rumor Propagation Algorithm

When a notable event occurs (any InteractionEvent with magnitude > ±5):

1. Source NPC generates a RUMOR:
   {
     subject: PC,
     event_tag: memory flag tag,
     valence: positive or negative,
     magnitude: original event magnitude × 0.5 (rumors are diluted),
     source_npc: originator,
     hops: 0
   }

2. At end of each in-game day, for each NPC holding an unshared rumor:
   a. Roll against gossip_tendency
   b. If passes: propagate to all connections
   c. Each connection receives the rumor with magnitude reduced:
      received_magnitude = rumor.magnitude × connection.weight × (0.8 ^ hops)
   d. Increment hops
   e. Rumors stop propagating after 3 hops or when magnitude < 1

3. NPCs who receive a rumor about the PC adjust their Individual Disposition:
   disposition_change = received_magnitude × source_influence
   
4. The adjustment is tagged as RUMOR-SOURCED (not PERSONAL)
   RUMOR-SOURCED disposition is overridden by personal experience:
   first personal interaction replaces any rumor-based disposition
   with the actual interaction result

Example: Rumor Chain

PC saves the shopkeeper's kit from drowning in Millhaven.

Event: SAVED_CHILD, magnitude: +20, NPC: Shopkeeper Mira (rabbit-folk)

Mira's connections:
  - Husband Oren (FAMILY, weight 0.9, gossip 0.8, influence 0.6)
  - Neighbor Tal (CLOSE_FRIEND, weight 0.7, gossip 0.5, influence 0.3)
  - Customer Joss (ACQUAINTANCE, weight 0.2, gossip 0.7, influence 0.2)

Rumor magnitude: 20 × 0.5 = 10

Day 1 propagation (Mira tells everyone, gossip_tendency 0.9):
  Oren receives: 10 × 0.9 = 9.0 → disposition change: 9.0 × 0.6 = +5.4
  Tal receives: 10 × 0.7 = 7.0 → disposition change: 7.0 × 0.3 = +2.1
  Joss receives: 10 × 0.2 = 2.0 → disposition change: 2.0 × 0.2 = +0.4

Day 2 (hop 2 — Oren and Tal might tell their contacts):
  Oren tells his colleague Bram: 9.0 × 0.8 × 0.4 = 2.88 → +2.88 × influence
  ...and so on, diminishing with each hop

Result: Within a few days, much of Millhaven has a mild positive predisposition
toward the PC. Not life-changing, but when the PC walks into the tavern, the
bartender has heard something nice about them. Tiny advantage. Earned.

Negative Rumor Amplification

Negative rumors propagate faster and decay slower than positive ones. This is biologically grounded: in a world where predator/prey dynamics shape cognition, threat-information is prioritized over comfort-information.

Negative rumor modifiers:
  gossip_tendency: ×1.3 (more likely to share bad news)
  magnitude decay per hop: 0.85 (instead of 0.80 — decays slower)
  maximum hops: 4 (instead of 3 — travels further)

Bad news travels fast. The PC's mistakes follow them longer than their kindnesses.



SECTION VI: CLADE-SPECIFIC INTERACTION MODIFIERS

Scent in Social Encounters

This is Theriapolis. Scent affects every interaction. The disposition system accounts for this:

Scent-Readable Emotions: During conversation, the PC's emotional state can be scent-read by NPCs with appropriate abilities:

If NPC has scent ability (Canidae, most predator Clades, Scent-Brokers):
  PC's dialogue choice carries an EMOTIONAL TRUTH value
  Determined by: does the chosen dialogue match the PC's actual situation?
  
  If PC selects [Lie: "I'm fine"] while at low HP or after a traumatic event:
    NPC detects stress-scent inconsistency
    Deception check required: PC CHA (Deception) vs. NPC WIS (Perception)
    Failure: -2 to -5 disposition ("You smell like fear. Don't lie to me.")
    Success: no penalty, but NPC may note suspicion
  
  If PC selects [Honest: "I've been through hell"] while genuinely distressed:
    NPC detects consistency between words and scent
    +1 to +3 disposition ("Good. Honest. I can work with honest.")

Scent Compatibility: Some Clade combinations produce instinctive comfort or discomfort beyond prejudice:

Canid PC + Canid NPC: +3 scent-comfort (familiar, pack-adjacent)
Canid PC + Cervid NPC: -3 scent-discomfort (predator-scent triggers prey-alert)
Cervid PC + Cervid NPC: +3 scent-comfort (herd-adjacent)
Hybrid PC (unmasked) + any NPC: -2 to -5 scent-discomfort (uncanny-valley response)
Hybrid PC (masked) + any NPC: 0 (mask working) or variable (mask failing)

These modifiers are small but persistent — applied to every interaction, every time. They represent the background hum of biology that never shuts up.

Arousal Detection: If the PC is affected by involuntary arousal (pheromone compound, stress response, biological quirk), NPCs with scent ability detect it. This can produce:

  • Embarrassment (disposition -1 to -3 — the NPC is uncomfortable)
  • Exploitation (hostile NPC uses the information against the PC)
  • Sympathy (understanding NPC recognizes it as involuntary, no penalty)
  • Context-specific responses (in a romantic or intimate context, very different)

Body Language Reading

Felidae NPCs read body language with grammatical precision. Additional modifiers:

If NPC is Felidae:
  PC tail-position and ear-position are evaluated
  Confident posture: +1 to +2 (Felidae respect composure)
  Submissive posture: -1 to -3 (Felidae are contemptuous of groveling)
  Aggressive posture: +0 to +2 (depends on context — Felidae respect controlled aggression)
  Inconsistent body language: -2 to -4 (Felidae distrust incongruence)

For PCs who are Felidae: automatic +2 with Felid NPCs on first meeting (body language is mutually legible — instant comfort).

For Hybrid PCs with Felid traits: body language may be "illegible" (blended signals), producing the -2 to -4 incongruence penalty unless the PC has trained Felid body-language mimicry (Passer background or specific skill investment).



SECTION VII: UI REPRESENTATION

What the Player Sees

Faction Standing: Visible as a labeled meter (HOSTILE through CHAMPION) in the faction screen. Exact numerical value visible in detailed view. Changes are notified with a small pop-up: "[Covenant Enforcers: +8 — Favorable]"

Individual Disposition: NOT displayed as a number. The player reads NPC disposition through behavioral cues:

  • Dialogue tone (warm, neutral, cold, hostile)
  • Body language descriptions in dialogue boxes ("She leans forward, ears perked" vs. "She crosses her arms, ears flat")
  • Scent descriptions (if PC has scent abilities): "You catch warmth in her scent — comfort, maybe trust" vs. "Her scent sharpens — cortisol, wariness"
  • Pricing (discounts or markups communicated through the shop interface)
  • Available dialogue options (locked options visibly greyed with a tooltip: "Requires higher trust" or "This NPC is hostile")

Trust Level: Displayed as a small icon next to the NPC's name in the interaction screen. Five tiers, five icons (e.g., a closed fist for STRANGER, an open paw for BONDED). The player can see where they stand without seeing the math.

Clade Bias: NEVER directly displayed. The player experiences it through its effects — cold initial receptions, warmer receptions from same-Clade NPCs, the visible effort required to win over certain individuals. If the player is paying attention, they'll feel the pattern. But the game never says "this NPC has -20 Canidae bias." That would flatten the experience. Prejudice should be felt, not read off a spreadsheet.

The Companion Disposition Panel

Companion NPCs (Venn, Brenn, Whisper) have an expanded UI:

  • Disposition meter (still not exact numbers, but a more detailed bar: cold → warm → hot, with a marker showing trend direction)
  • Trust level icon
  • "Mood" indicator based on recent events ("Uneasy," "Confident," "Conflicted," "Grateful")
  • Memory flag highlights: "Remembers: You saved her from Grinner" / "Remembers: You sided with the Enforcers over hybrid testimony"


SECTION VIII: TUNING AND BALANCE GUIDELINES

Design Goals for Tuning

  1. First impressions should feel meaningful but not deterministic. A wolf-folk PC entering a Cervid town should feel the chill but not be locked out of content. Clade bias should impose a tax, not a wall.

  2. Investment should pay off. A player who puts 15+ interactions into an NPC should feel the relationship meaningfully shift. The STRANGER → ACQUAINTANCE → FAMILIAR progression should each produce noticeable behavior changes.

  3. Betrayal should sting. The system should make the player feel the weight of broken trust. Mechanical consequences (lost access, hostility) reinforce narrative consequences.

  4. The hybrid experience should be distinctly harder. Hybrid PCs face compounding penalties: Clade bias (hybrid modifier), scent-discomfort, body-language illegibility, and potential passer-discovery cascades. This is by design — it mirrors the world. The game should be winnable as a hybrid but should feel different, more effortful in social contexts, more rewarding when trust is earned.

  5. No NPC should feel like a vending machine. Even merchants should have disposition. The blacksmith who likes you gives you +1 crafted items for free. The blacksmith who hates you "just ran out" of the item you need. The system turns every NPC into a tiny relationship to manage.

Tuning Levers

Lever Effect Adjust When...
Bias profile modifier ranges Controls first-impression severity PCs feel too locked out or too welcome
Trust level thresholds Controls relationship progression speed Relationships form too fast or too slow
Weight table ratios Controls how fast personal experience overrides bias Bias feels too sticky or too irrelevant
Decay rate Controls relationship maintenance burden Players feel punished for exploring or don't feel investment persistence
Rumor propagation speed Controls how fast reputation precedes the PC World feels too responsive or too inert
Negative rumor amplification Controls asymmetry of bad vs. good reputation Bad reputation feels too punishing or too forgiving
Betrayal multipliers Controls severity of trust violations Betrayals feel too harsh or too light

Playtest Metrics to Track

  • Average Effective Disposition at first interaction by PC Clade (should vary by 1525 points between easiest and hardest Clade, not more)
  • Average interactions to reach FAMILIAR (target: 812)
  • Average interactions to reach TRUSTED (target: 1825)
  • Percentage of players who trigger a betrayal event per playthrough (target: 4060%)
  • Percentage of hybrid PCs who are discovered while passing (target: at least once per playthrough, timing varies)
  • Faction standing swing range per act (should shift meaningfully per act but not whiplash — target ±30 per act maximum)

Document Version 1.0 — Theriapolis Faction Influence & Reputation System Compiled by ENI for LO