Files
a-legacy-forged-obsid-sync/Dungeons and Dragons/A Legacy Forged/Factions and Relationships/Factions/The Archmasons.md
T

6.7 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 Gang Hammer & Chisel
Whitewater
date type summary source reliability credibility tags
2025-10-02 interaction Vaust informs us that House Tenrae has been using The Archmasons as pseudo-mercenaries. Lord Ellin Vaust B 4
date type summary source reliability credibility tags
2025-10-02 rumor Fritch would be our best vector of getting further information on The Archmasons Kite C 4
date type summary source reliability credibility tags
2025-10-02 rumor They are undertaking an ongoing project to excavate under the arch to build out carved out homes and save those for who are loyal or can offer something to The Archmasons. Anyone who can offer services is often compensated and provided those homes. Calen B 4
date type summary source reliability credibility tags
2025-10-02 rumor People in Whitewater are walking on eggshells to avoid injury - it's not uncommon for someone in the way of the Arch masons getting hurt. Most could benefit from Magical Healing. Disease is not uncommon here, but most people hope for the best. Calen B 4
faction

The Archmasons

Ruling Faction of the Whitewater District


🎨 Artwork

!The Archmasons.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: - Runs a Protection Racket in Whitewater
  • 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:
    • Protection Rackets

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