MUD on Urbit

Factions & Reputation

design

Status: Design Date: 2026-04-05

NPCs, mobs, and areas belong to factions. Player actions shift faction standing. Standing affects shop prices, dialogue, aggro, quest access, and area entry.

Factions

Factions are defined in the area JSON and stored in state. Each faction has an ID, name, and a list of opposing factions.

The Shattered Covenant Factions

IDNameDescriptionOpposing
survivorsThe SurvivorsAshwick villagers and refugeescovenant
old-orderThe Old OrderSpectral knights and their legacycovenant
covenantThe Covenant of AshThe cult summoning the Unborn Godsurvivors, old-order, hermits
hermitsThe HermitsIndependent druids, witches, outcastscovenant
bone-artisansThe Bone ArtisansNecromancer’s servants in the Bone Spire

Faction Template

{
  "factions": [
    {
      "id": "survivors",
      "name": "The Survivors",
      "opposing": ["covenant"]
    }
  ]
}

Standing

Scale

Numeric -1000 to +1000, mapped to 5 tiers:

RangeTierEffect
-1000 to -500HostileFaction mobs attack on sight. Shops refuse service. Blocked from faction areas.
-499 to -100UnfriendlyShops charge 50% markup. Some dialogue locked.
-99 to +99NeutralDefault. Normal prices. Basic dialogue.
+100 to +499FriendlyShops give 10% discount. Extra dialogue topics. Quest access.
+500 to +1000HonoredShops give 25% discount. All dialogue. Faction title available.

Storage

Per-player, per-faction standing stored on the character:

faction-standing=(map @tas @sd)

The key is the faction ID (@tas), the value is a signed decimal (@sd) from --1.000 to --1.000. Default for any faction not in the map: --0 (Neutral).

Standing Changes

Kill Mob

When a player kills a mob, check the mob’s faction. If the mob has a faction:

  • Lose 5-20 standing with that faction (based on mob level)
  • Gain 3-10 standing with each opposing faction

Formula:

loss = (min 20 (add 5 (div level 3)))
gain = (div loss 2)

Complete Quest

Quest completion can award faction standing via the quest reward:

{
  "rewards": {
    "faction-standing": [
      {"faction": "survivors", "amount": 50},
      {"faction": "covenant", "amount": -50}
    ]
  }
}

Hook Actions

A new hook action type %faction-standing adjusts standing:

{"type": "faction-standing", "faction": "survivors", "amount": 25}

This lets designers tie standing changes to any hook trigger (entering a room, talking to an NPC, using an item).

Effects

Shop Prices

In do-list-shop and do-buy, if the shop NPC has a faction:

  • Hostile: “The shopkeeper refuses to serve you.”
  • Unfriendly: prices * 1.5
  • Neutral: normal prices
  • Friendly: prices * 0.9
  • Honored: prices * 0.75

NPC Dialogue

NPCs with a faction check standing before responding:

  • Hostile: “Get away from me.” (no dialogue)
  • Unfriendly: basic greeting only, no topics
  • Neutral: greeting + standard topics
  • Friendly: all topics + bonus dialogue
  • Honored: everything + special lore/hints

The dialogue config gains an optional min-standing field per topic:

{
  "topics": {
    "world": {"text": "...", "min-standing": 0},
    "secret": {"text": "...", "min-standing": 100},
    "lore": {"text": "...", "min-standing": 500}
  }
}

Mob Aggro

Mobs with a faction check the player’s standing when the player enters the room:

  • If standing is Hostile (-500 or below), the mob auto-attacks (same as %aggressive flag but faction-driven)
  • This stacks with the mob’s own %aggressive flag — an aggressive mob attacks regardless, but a normally passive faction mob becomes aggressive to enemies

Quest Access

Quest prerequisites can include faction standing:

{
  "prerequisites": {
    "min-faction": {"faction": "old-order", "standing": 100}
  }
}

Room Access

Rooms can have a faction-gate field:

{
  "faction-gate": {"faction": "survivors", "min-standing": 0}
}

Players below the minimum standing are blocked: “The guards turn you away.”

Commands

CommandDescription
factionShow your standing with all known factions
faction <name>Show detailed standing with a specific faction

Display

=== Faction Standing ===
  The Survivors: Friendly (+230)
  The Old Order: Neutral (+15)
  The Covenant of Ash: Hostile (-620)
  The Hermits: Friendly (+180)

Types

New Types

+$  faction
  $:  id=@tas
      name=@t
      opposing=(list @tas)
  ==

Character Addition

faction-standing=(map @tas @sd)

Mob Template Addition

faction=(unit @tas)

NPC Addition

faction=(unit @tas)

State Addition

factions=(map @tas faction)

Remort Behavior

Faction standing resets to neutral on remort. The player starts fresh with all factions. This creates replay value — different faction choices on each playthrough.

Impact on Existing Systems

SystemChange
Character typeAdd faction-standing=(map @tas @sd)
Mob template typeAdd faction=(unit @tas)
NPC typeAdd faction=(unit @tas)
StateAdd factions=(map @tas faction)
Mob killAdjust standing based on mob faction + opposing
Shop pricingScale by standing tier
NPC dialogueGate topics by min-standing
Mob AIFaction-hostile aggro
Room entryOptional faction gate
Quest prereqsOptional min-faction requirement
HooksNew %faction-standing action type
ImportParse factions from JSON, faction fields on mobs/NPCs
RemortReset faction standing to neutral
Score/faction commandDisplay standings

Not Included

  • Faction leveling. No faction XP or faction skills. Just standing.
  • Faction quests. Quests have faction prereqs but no dedicated faction quest board.
  • Faction PvP. No faction-vs-faction warfare system.
  • Cross-world factions. Factions are per-world.
  • Faction decay. Standing doesn’t decay over time. Only player actions change it.