Files

6.9 KiB
Raw Blame History

Reputation, Faction_Type, Motto, Ideology, Symbol, Colors, Headquarters, Territories, Allies, Rivals, SMH_Acronym, Intel, Tags
Reputation Faction_Type Motto Ideology Symbol Colors Headquarters Territories Allies Rivals SMH_Acronym Intel Tags
5 Gang Semi-Communism
Drenches
date type summary source reliability credibility tags
2026-02-03 interaction The Thin Wisps had agreements with House Valrora when Ilvara Valrora was steward. Freddie A 5
date type summary source reliability credibility tags
2025-10-02 interaction Vaust informs us that some of the taxes that the Thin Wisps impose on those in the Drenches, end up in the hands of House Elidari. Lord Ellin Vaust A 5
date type summary source reliability credibility tags
2025-10-02 interaction Maltrix in Session 8 - Operatic Intentions believes that their vision for the Drenches, is idealistic. They believe that they should be the ones running the Drenches. Maltrix A 5
date type summary source reliability credibility tags
2025-10-02 interaction We were explicitly warned again, by the Thin Wisps to stop snooping in their territory. Calen A 5
date type summary source reliability credibility tags
2025-10-02 interaction Metternich received communiques from his spies from the Thin Wisps, with them explicitly warning the SMH to stay off their turf. Session 1 - The Beginning of the End A 5
faction

Thin Wisps

Territorial Gang of the Drenches


🎨 Artwork

!Thin Wisps.png Optional caption / artist credit


🧭 Identity & Heraldry

  • Motto: = default(this.Motto, "—")
  • Symbol: = default(this.Symbol, "—")
  • Colors: = default(this.Colors, "—")
  • Headquarters: = default(this.Headquarters, "—")
  • Territories: = this.Territories

📜 Ideology & Goals

  • Ideology / Alignment: = default(this.Ideology, "—")
  • Primary Goals: - Believe they should be the one's running the drenches - Believe that people who work in the various parts of the city should be running it.
  • Taboos / Anathema:


🤝 Relationship with Party

  • Reputation: = this.Reputation

🧑‍💼 Leadership & Structure

  • Leader(s): NPC A, NPC B
  • Structure: (council, hierarchy, cells, chapters)
  • Key Offices: (Intelligence, Logistics, Priory, Treasury, etc.)

🧰 Assets & Operations

  • Resources: (coin, troops, mages, ships, safehouses, contacts)
  • Notable Holdings:
  • Typical Ops / Tactics:
    • Intimidation (see intel)
    • Thievery

🕊️ Diplomacy & Relations

  • Allies: = this.Allies
  • Rivals: = this.Rivals
  • Stance toward “SMH” (their wording): = default(this.SMH_Acronym, "—")

🧠 Intelligence & Mentions

name  Add Intel
type command
action Templater: Insert Add Intel Entry to Faction
const THIS = dv.current();
const thisName = String(THIS.file.name);
const thisLC = thisName.toLowerCase();

const factions = dv.pages("#faction");

// mention detector (same logic as your table)
function mentionsThisFaction(entry) {
  const sum = String(entry.summary ?? "");
  if (sum.includes(`[[${thisName}]]`) || sum.includes(`[[${thisName}|`)) return true;
  const src = entry.source;
  const list = Array.isArray(src) ? src : (src ? [src] : []);
  for (const s of list) {
    if (typeof s === "string") {
      if (s.includes(`[[${thisName}]]`) || s.includes(`[[${thisName}|`)) return true;
      if (s.toLowerCase() === thisLC) return true;
    } else if (s && typeof s === "object" && s.path) {
      const base = s.path.split("/").pop().replace(/\.md$/i,"").toLowerCase();
      if (base === thisLC) return true;
    }
  }
  return false;
}

const own = (THIS.Intel ?? []).length;

let mentions = 0;
for (const p of factions.where(p => p.file.name !== thisName)) {
  for (const it of (p.Intel ?? [])) if (mentionsThisFaction(it)) mentions++;
}

dv.paragraph(`_Entries: ${own + mentions} (own ${own} + mentions ${mentions})_`);
// Current faction
const THIS = dv.current();
const thisName = String(THIS.file.name);
const thisLC   = thisName.toLowerCase();

// All faction pages (including this one)
const factions = dv.pages("#faction");

// Mention detector: summary has [[This Faction]] OR source points at this faction
function mentionsThisFaction(entry) {
  const sum = String(entry.summary ?? "");
  if (sum.includes(`[[${thisName}]]`) || sum.includes(`[[${thisName}|`)) return true;

  const src = entry.source;
  const list = Array.isArray(src) ? src : (src ? [src] : []);
  for (const s of list) {
    if (typeof s === "string") {
      if (s.includes(`[[${thisName}]]`) || s.includes(`[[${thisName}|`)) return true;
      if (s.toLowerCase() === thisLC) return true; // fallback: plain text match
    } 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;
    }
  }
  return false;
}

// Collect rows
const rows = [];

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

// 2) Mentions from other factions
for (const p of factions.where(p => p.file.name !== thisName)) {
  for (const it of (p.Intel ?? [])) {
    if (mentionsThisFaction(it)) {
      rows.push({
        date: it.date ?? "",
        from: p.file.link,
        type: it.type ?? "",
        summary: String(it.summary ?? ""),
        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.table(
    ["Date","From Faction","Type","Summary","Source","Rel","Cred","Tags"],
    rows.map(r => [r.date, r.from, r.type, r.summary, r.source, r.rel, r.cred, r.tags])
  );
}

Add new entries in the frontmatter under Intel: (keep newest on top). Suggested fields: date, type, summary, source, reliability, credibility, tags.


TABLE link(file.name) AS NPC, number(Level_of_Influence) AS Influence, default(SMH_Acronym, "—") AS SMH
FROM #npc
WHERE file.name != "NPC Template"
AND (
  Faction = this.file.link
  OR lower(string(Faction)) = lower(this.file.name)
  OR contains(lower(string(Faction)), lower(this.file.name))
)
SORT number(Level_of_Influence) DESC

📌 Plot Hooks & Notes


🗒 Session Updates

  • 2025-10-02: …