Factions & Reputation
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
| ID | Name | Description | Opposing |
|---|---|---|---|
survivors | The Survivors | Ashwick villagers and refugees | covenant |
old-order | The Old Order | Spectral knights and their legacy | covenant |
covenant | The Covenant of Ash | The cult summoning the Unborn God | survivors, old-order, hermits |
hermits | The Hermits | Independent druids, witches, outcasts | covenant |
bone-artisans | The Bone Artisans | Necromancer’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:
| Range | Tier | Effect |
|---|---|---|
| -1000 to -500 | Hostile | Faction mobs attack on sight. Shops refuse service. Blocked from faction areas. |
| -499 to -100 | Unfriendly | Shops charge 50% markup. Some dialogue locked. |
| -99 to +99 | Neutral | Default. Normal prices. Basic dialogue. |
| +100 to +499 | Friendly | Shops give 10% discount. Extra dialogue topics. Quest access. |
| +500 to +1000 | Honored | Shops 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
%aggressiveflag but faction-driven) - This stacks with the mob’s own
%aggressiveflag — 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
| Command | Description |
|---|---|
faction | Show 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
| System | Change |
|---|---|
| Character type | Add faction-standing=(map @tas @sd) |
| Mob template type | Add faction=(unit @tas) |
| NPC type | Add faction=(unit @tas) |
| State | Add factions=(map @tas faction) |
| Mob kill | Adjust standing based on mob faction + opposing |
| Shop pricing | Scale by standing tier |
| NPC dialogue | Gate topics by min-standing |
| Mob AI | Faction-hostile aggro |
| Room entry | Optional faction gate |
| Quest prereqs | Optional min-faction requirement |
| Hooks | New %faction-standing action type |
| Import | Parse factions from JSON, faction fields on mobs/NPCs |
| Remort | Reset faction standing to neutral |
| Score/faction command | Display 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.