Files

5.5 KiB
Raw Permalink Blame History

Level_of_Influence, Faction, SMH_Acronym, Tags, Intel, Knows About HQ
Level_of_Influence Faction SMH_Acronym Tags Intel Knows About HQ
0 The Archmasons
npc
date type summary session reliability credibility tags
2026-07-08 op While infiltrating the Arch, we find out that Fritch has been working on the dig under the Arch - currently serving as a Dig Leader for the day we do our infiltration. We're currently not sure how he managed to end up down here, but it's plausible to assume that he got drafted down here in the shakeup of Whitewater. Session 33 - Infiltration of the Arch A 5
date type summary session source reliability credibility tags
2026-01-07 interaction Metternich tells Fritch that House Elidari plans to supplant The Archmasons. Metternich says that he doesn't ask for anything in return at the moment, but asks for an opportunity to solve problems. Session 16 - A Meeting of Consequence Fritch A 5
False

Fritch

Role/Description — e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"

🎨 Artwork

!Fritch.png Optional caption / alt text


🧑 NPC Overview

  • Full Name: Fritch
  • Race / Ancestry: Halfling
  • Gender / Pronouns:
  • Occupation / Role: Information Broker for The Archmasons
  • Faction / Allegiance: The Archmasons
  • 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
    • Influence Skills
    • Weaknesses
    • Resistances
    • Biases

🧠 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: The Archmasons
  • 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:
    • 2026-01-07: …

🔗 Connections

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