Files
T

6.2 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
0
date type summary source reliability credibility tags
2025-10-02 interaction Vaust informs us that House Asase has been exceeding their quota for excavations underneath the arch. It's possible that House Asase is working with The Archmasons on this endeavour. Lord Ellin Vaust B 5
date type summary source reliability credibility tags
2025-10-02 interaction We've learned that Iniana Asase runs a Soup Kitchen in the Drenches Kite A 5
date type summary source reliability credibility tags
2025-10-02 rumor The Inspector General and Auditor of Internal Affairs for Y'athyr is from this house. Kite A 1
faction

House Asase

One-line role/description — e.g., “Elven High House controlling Yathirs docks.”


🎨 Artwork

!House Asase.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:

  • 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:

🕊️ 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: …