Files
a-legacy-forged-obsid-sync/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Siviane Marravet.md
T

5.3 KiB
Raw Blame History

Level_of_Influence, Faction, SMH_Acronym, Tags, Intel
Level_of_Influence Faction SMH_Acronym Tags Intel
9 House Vyshaan
npc
date type summary source reliability credibility tags
2025-12-3 interaction Siviane Marravet seems to be entirely aware of who Metternich is, and his ties to Alsat. Siviane Marravet A 5

Siviane Marravet

Patron of the Arts, the Lady of Emberwine

🎨 Artwork

!Siviane Marravet.png Optional caption / alt text


🧑 NPC Overview

  • Full Name: Siviane Marravet
  • Race / Ancestry: Elf
  • Gender / Pronouns: She/Her
  • Occupation / Role:
  • Faction / Allegiance:
  • SMH (what THEY call it): = this.SMH_Acronym
  • Notable Traits: (quirks, mannerisms, appearance)
  • First Impression: (how the party perceives them)

🤝 Relationship with Party

  • Level of Influence: = this.Level_of_Influence (10 to +10)
  • Notes on Influence: (what actions improve/worsen standing)
    • Discovery Skills
      • DC 15 Espionage Lore
      • DC 18 Society
      • DC 18 Deception
      • DC 20 Perception
    • Influence Skills
      • DC 15 Espionage Lore
      • DC 18 Thievery
      • DC 18 Stealth
      • DC 20 Performance
      • DC 22 Diplomacy
      • DC 25 Intimidation
    • Weaknesses
      • Sharing juicy gossip or industry secrets reduces the influence DC by 4.
    • Resistances
      • Fruitless conversations increase the check's DC by 4.
    • Biases
      • People who present themselves as being useful for subterfuge, backstabbing or politicking gain a +2 bonus.
      • Stalwart Lawful individuals gain a -2 penalty

🧠 Intel (auto)

const THIS = dv.current();
const thisName = String(THIS.file.name);
const thisLC = thisName.toLowerCase();

// Scan faction & NPC notes that have Intel arrays
const pages = dv.pages("#npc or #faction").where(p => p.Intel);

// Does an Intel entry reference THIS NPC?
function mentionsThisNPC(entry) {
  const sum = String(entry.summary ?? "");

  // 1) Explicit wikilink in summary
  if (sum.includes(`[[${thisName}]]`) || sum.includes(`[[${thisName}|`)) return true;

  // 2) Source field (string/link/list)
  const src = entry.source;
  const arr = Array.isArray(src) ? src : (src ? [src] : []);
  for (const s of arr) {
    if (typeof s === "string") {
      // quoted link or plain text
      const unq = s.replace(/^"+|"+$/g, ""); // drop surrounding quotes if any
      if (unq.includes(`[[${thisName}]]`) || unq.includes(`[[${thisName}|`)) return true;
      // if they typed just the name
      if (unq.replace(/\[\[|\]\]/g, "").trim().toLowerCase() === thisLC) return true;
    } else if (s && typeof s === "object" && s.path) {
      // wikilink object
      const base = s.path.split("/").pop().replace(/\.md$/i, "").toLowerCase();
      if (base === thisLC) return true;
    }
  }

  // Optional (looser): plain text mention in summary
  // return sum.toLowerCase().includes(thisLC);

  return false;
}

// Collect rows: 1) own Intel, 2) mentions from other notes
const rows = [];

// Own Intel (from this NPC note)
for (const it of (THIS.Intel ?? [])) {
  rows.push({
    from: THIS.file.link,
    date: it.date ?? "",
    type: it.type ?? "",
    summary: String(it.summary ?? ""),
    session: it.session ?? "",
    source: it.source ?? "",
    rel: it.reliability ?? "",
    cred: it.credibility ?? "",
    tags: Array.isArray(it.tags) ? it.tags.join(", ") : (it.tags ?? "")
  });
}

// Mentions elsewhere
for (const p of pages.where(p => p.file.path !== THIS.file.path)) {
  for (const it of (p.Intel ?? [])) {
    if (mentionsThisNPC(it)) {
      rows.push({
        from: p.file.link,
        date: it.date ?? "",
        type: it.type ?? "",
        summary: String(it.summary ?? ""),
        session: it.session ?? "",
        source: it.source ?? "",
        rel: it.reliability ?? "",
        cred: it.credibility ?? "",
        tags: Array.isArray(it.tags) ? it.tags.join(", ") : (it.tags ?? "")
      });
    }
  }
}

// Sort newest first
rows.sort((a,b) => String(b.date).localeCompare(String(a.date)));

if (!rows.length) {
  dv.paragraph("_No intel yet._");
} else {
  dv.paragraph(`_Entries: ${rows.length} (own ${(THIS.Intel ?? []).length} + mentions ${Math.max(0, rows.length - (THIS.Intel ?? []).length)})_`);
  dv.table(
    ["From Note","Date","Type","Summary","Session","Source","Rel","Cred","Tags"],
    rows.map(r => [r.from, r.date, r.type, r.summary, r.session, r.source, r.rel, r.cred, r.tags])
  );
}
name  Add Intel
type command
action Templater: Insert Add Intel Entry to NPC

🏛️ Relations & Factions

  • Primary Faction: House Vyshaan
  • Allied Factions: Faction A, Faction B
  • Rival Factions: Faction C
  • Personal Enemies / Allies: NPC or PC

📖 History & Background

  • Origin / Past:
  • Known Motivations:
  • Secrets / Rumors:

🎭 Roleplay Notes

  • Personality: (e.g., stern, practical, loyal)
  • Speech Style / Quirks: (catchphrases, accent, tics)
  • Appearance Details: (clothing, scars, distinguishing features)

🗺️ Miscellaneous

  • Current Location:
  • Important Items / Assets:
  • Plot Hooks / Ties to PCs:
  • Session Notes / Updates:
    • 2025-12-02: …

🔗 Connections

  • Related NPCs:
    • NPC A (Mentor)
    • NPC B (Rival)
  • PC Ties: (how the party knows them)