From a6a7d0781be24386ce7d9819a9d1d09de404edeb Mon Sep 17 00:00:00 2001 From: Jason McPherson Date: Tue, 2 Dec 2025 19:20:28 -0600 Subject: [PATCH] vault commit: 2025-12-02 19:20, 18 files changed --- .../Factions/House Elidari.md | 2 +- .../{House Valora.md => House Valrora.md} | 0 .../NPCs/Avas Assase.md | 178 +++++++++++++++++ .../NPCs/Calia Noctilun.md | 4 + .../{Cormack Elidari.md => Cormac Elidari.md} | 12 +- .../NPCs/Eosaph Tenrae.md | 4 + .../NPCs/Fenric Draycott.md | 11 +- .../NPCs/Ilvara Valora.md | 183 +++++++++++++++++ .../NPCs/Katarin Calil.md | 176 +++++++++++++++++ .../NPCs/Kerrian Calil.md | 179 +++++++++++++++++ .../NPCs/Lord Ellin Vaust.md | 9 + .../NPCs/Marcellus Magunna.md | 178 +++++++++++++++++ .../NPCs/Nuala Elidari.md | 178 +++++++++++++++++ .../NPCs/Onora Elidari.md | 184 ++++++++++++++++++ .../NPCs/Ronan Elidari.md | 2 +- .../NPCs/Siviane Marravet.md | 178 +++++++++++++++++ .../Session 5 - The Masquerade.md | 2 +- .../Session 7 - Meeting with Vaust.md | 2 +- 18 files changed, 1475 insertions(+), 7 deletions(-) rename Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/{House Valora.md => House Valrora.md} (100%) create mode 100644 Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Avas Assase.md rename Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/{Cormack Elidari.md => Cormac Elidari.md} (95%) create mode 100644 Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Ilvara Valora.md create mode 100644 Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Katarin Calil.md create mode 100644 Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Kerrian Calil.md create mode 100644 Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Marcellus Magunna.md create mode 100644 Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Nuala Elidari.md create mode 100644 Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Onora Elidari.md create mode 100644 Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Siviane Marravet.md diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Elidari.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Elidari.md index ad97df8..d04c967 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Elidari.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Elidari.md @@ -68,7 +68,7 @@ Tags: --- ## πŸ§‘β€πŸ’Ό Leadership & Structure -- **Leader(s):** [[Cormack Elidari]] +- **Leader(s):** [[Cormac Elidari]] - **Structure:** (council, hierarchy, cells, chapters) - **Key Offices:** (Intelligence, Logistics, Priory, Treasury, etc.) diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Valora.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Valrora.md similarity index 100% rename from Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Valora.md rename to Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Valrora.md diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Avas Assase.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Avas Assase.md new file mode 100644 index 0000000..96e9ac4 --- /dev/null +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Avas Assase.md @@ -0,0 +1,178 @@ +--- +Level_of_Influence: 0 +Faction: "[[House Asase]]" +SMH_Acronym: +Tags: + - npc +--- + +# Avas Assase +*Role/Description β€” e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"* + +## 🎨 Artwork +![[Avas Assase.png]] +*Optional caption / alt text* + +--- + +## πŸ§‘ NPC Overview +- **Full Name:** Avas Assase +- **Race / Ancestry:** Elf +- **Gender / Pronouns:** He/Him +- **Occupation / Role:** Archmeister +- **Faction / Allegiance:** [[House Asase]] +- **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 Genealogy Lore + - DC 18 Society + - DC 18 Arcana, Religion, Occultism and Nature + - DC 20 Perception + - ***Influence Skills*** + - ***Weaknesses*** + - ***Resistances*** + - ***Biases*** + +--- + +## 🧠 Intel (auto) +```dataviewjs +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]) + ); +} +``` + +```button +name βž• Add Intel +type command +action Templater: Insert Add Intel Entry to NPC +``` + +--- + +## πŸ›οΈ Relations & Factions +- **Primary Faction:** [[House Asase]] [[The Esoterium]] +- **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:** + - [[Iniana Asase]] (Daughter) + - [[NPC B]] (Rival) +- **PC Ties:** (how the party knows them) diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Calia Noctilun.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Calia Noctilun.md index a0e5bef..350efa2 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Calia Noctilun.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Calia Noctilun.md @@ -31,6 +31,10 @@ Tags: - **Level of Influence:** `= this.Level_of_Influence` (βˆ’10 to +10) - **Notes on Influence:** (what actions improve/worsen standing) - ***Discovery Skills*** + - DC 15 Theater Lore + - DC 18 Crafting + - DC 18 Performance + - DC 20 Perception - ***Influence Skills*** - ***Weaknesses*** - ***Resistances*** diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Cormack Elidari.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Cormac Elidari.md similarity index 95% rename from Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Cormack Elidari.md rename to Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Cormac Elidari.md index d15cb54..0d2a28c 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Cormack Elidari.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Cormac Elidari.md @@ -6,7 +6,7 @@ Tags: - npc --- -# Cormack Elidari +# Cormac Elidari *Head of the Y'athyr City Watch, Head of House Elidari* ## 🎨 Artwork @@ -16,7 +16,7 @@ Tags: --- ## πŸ§‘ NPC Overview -- **Full Name:** Cormack Elidari +- **Full Name:** Cormac Elidari - **Race / Ancestry:** Elf - **Gender / Pronouns:** Male, He/Him - **Occupation / Role:** Head of the City Guard @@ -31,7 +31,15 @@ Tags: - **Level of Influence:** `= this.Level_of_Influence` (βˆ’10 to +10) - **Notes on Influence:** (what actions improve/worsen standing) - ***Discovery Skills*** + - DC 15 Legal Lore + - DC 18 Society + - DC 18 Diplomacy + - DC 20 Perception - ***Influence Skills*** + - DC 22 Athletics + - DC 22 Arcana + - DC 22 Deception + - DC 25 Intimidation - ***Weaknesses*** - ***Resistances*** - ***Biases*** diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Eosaph Tenrae.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Eosaph Tenrae.md index 5bb25dd..dc29a9a 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Eosaph Tenrae.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Eosaph Tenrae.md @@ -31,6 +31,10 @@ Tags: - **Level of Influence:** `= this.Level_of_Influence` (βˆ’10 to +10) - **Notes on Influence:** (what actions improve/worsen standing) - ***Discovery Skills*** + - DC 15 Sailing Lore + - DC 18 Society + - DC 18 Y'athyr Lore + - DC 20 Perception - ***Influence Skills*** - ***Weaknesses*** - ***Resistances*** diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Fenric Draycott.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Fenric Draycott.md index 6a3bd48..47d025a 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Fenric Draycott.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Fenric Draycott.md @@ -31,9 +31,18 @@ Tags: - **Level of Influence:** `= this.Level_of_Influence` (βˆ’10 to +10) - **Notes on Influence:** (what actions improve/worsen standing) - ***Discovery Skills*** + - DC 15 Nobility Lore + - DC 18 Diplomacy + - DC 18 Crafting + - DC 20 Perception - ***Influence Skills*** + - DC 20 Crafting + - DC 20 Diplomacy + - DC 22 Deception - ***Weaknesses*** + - Acting as [[Fenric Draycott|Fenric's]] wingman or helping him enable some sort of snafu reduces the influence DC by 2. - ***Resistances*** + - Treating [[Fenric Draycott]] as a lesser due to his station increases the checks DC by 2. - ***Biases*** --- @@ -138,7 +147,7 @@ action Templater: Insert Add Intel Entry to NPC ## πŸ›οΈ Relations & Factions - **Primary Faction:** [[Draycott Family]] -- **Allied Factions:** [[House Valora]] +- **Allied Factions:** [[House Valrora]] - **Rival Factions:** [[Faction C]] - **Personal Enemies / Allies:** [[Faylen Valora]] --Ally diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Ilvara Valora.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Ilvara Valora.md new file mode 100644 index 0000000..43a04fd --- /dev/null +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Ilvara Valora.md @@ -0,0 +1,183 @@ +--- +Level_of_Influence: 0 +Faction: "[[House Valrora]]" +SMH_Acronym: +Tags: + - npc +--- + +# Ilvara Valora +*Role/Description β€” e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"* + +## 🎨 Artwork +![[Ilvara Valora.png]] +*Optional caption / alt text* + +--- + +## πŸ§‘ NPC Overview +- **Full Name:** Ilvara Valrora +- **Race / Ancestry:** Elf +- **Gender / Pronouns:** She/Her +- **Occupation / Role:** +- **Faction / Allegiance:** [[House Valrora]] +- **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 Gaming Lore + - DC 18 Diplomacy + - DC 18 Society + - DC 20 Perception + - ***Influence Skills*** + - DC 20 Arcana + - DC 20 Diplomacy + - DC 22 Deception + - ***Weaknesses*** + - Acting with proper etiquette and manners reduces the Influence DC by 2. + - ***Resistances*** + - Discussing topics that would disrupt the status quo of the city increases the check's DC by 2. + - ***Biases*** + +--- + +## 🧠 Intel (auto) +```dataviewjs +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]) + ); +} +``` + +```button +name βž• Add Intel +type command +action Templater: Insert Add Intel Entry to NPC +``` + +--- + +## πŸ›οΈ Relations & Factions +- **Primary Faction:** [[House Valrora]] +- **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) diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Katarin Calil.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Katarin Calil.md new file mode 100644 index 0000000..b39d0af --- /dev/null +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Katarin Calil.md @@ -0,0 +1,176 @@ +--- +Level_of_Influence: 0 +Faction: "[[House Calil]]" +SMH_Acronym: +Tags: + - npc +--- + +# Katarin Calil +*Fashionista, Head of House Calil* + +## 🎨 Artwork +![[Katerine Calil.png]] +*Optional caption / alt text* + +--- + +## πŸ§‘ NPC Overview +- **Full Name:** Katarin Calil +- **Race / Ancestry:** Elf +- **Gender / Pronouns:** Female, She/Her +- **Occupation / Role:** Fashionista +- **Faction / Allegiance:** [[House Calil]] +- **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 Fashion Lore + - DC 18 Crafting Lore + - DC 18 Diplomacy + - DC 20 Perception + - ***Influence Skills*** + - ***Weaknesses*** + - ***Resistances*** + - ***Biases*** + +--- + +## 🧠 Intel (auto) +```dataviewjs +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]) + ); +} +``` + +```button +name βž• Add Intel +type command +action Templater: Insert Add Intel Entry to NPC +``` + +--- + +## πŸ›οΈ Relations & Factions +- **Primary Faction:** [[House Calil]] +- **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-11-24: … + +--- + +## πŸ”— Connections +- **Related NPCs:** +- **PC Ties:** (how the party knows them) diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Kerrian Calil.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Kerrian Calil.md new file mode 100644 index 0000000..67fc544 --- /dev/null +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Kerrian Calil.md @@ -0,0 +1,179 @@ +--- +Level_of_Influence: 0 +Faction: "[[House Calil]]" +SMH_Acronym: +Tags: + - npc +--- + +# Kerrian Calil +*Role/Description β€” e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"* + +## 🎨 Artwork +![[Kerrian Calil.png]] +*Optional caption / alt text* + +--- + +## πŸ§‘ NPC Overview +- **Full Name:** Kerrian Calil +- **Race / Ancestry:** Elf +- **Gender / Pronouns:** He/Him +- **Occupation / Role:** +- **Faction / Allegiance:** [[House Calil]] +- **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 Trade Lore + - DC 18 Crafting + - DC 18 Nature + - DC 20 Perception + - ***Influence Skills*** + - ***Weaknesses*** + - Discussing gossip and other interpersonal drama reduces the Influence DC by 2. + - ***Resistances*** + - ***Biases*** + +--- + +## 🧠 Intel (auto) +```dataviewjs +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]) + ); +} +``` + +```button +name βž• Add Intel +type command +action Templater: Insert Add Intel Entry to NPC +``` + +--- + +## πŸ›οΈ Relations & Factions +- **Primary Faction:** [[House Calil]] +- **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) diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Lord Ellin Vaust.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Lord Ellin Vaust.md index 95fd2f0..3f3777a 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Lord Ellin Vaust.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Lord Ellin Vaust.md @@ -33,7 +33,16 @@ Tags: - **Level of Influence:** `= this.Level_of_Influence` (βˆ’10 to +10) - **Notes on Influence:** (what actions improve/worsen standing) - ***Discovery Skills*** + - DC 15 Mercantile Lore/Labor Lore + - DC 18 Society + - DC 18 Diplomacy + - DC 20 Perception - ***Influence Skills*** + - DC 15 Mercantile Lore + - DC 18 Society + - DC 20 Performance + - DC 22 Diplomacy + - DC 22 Intimidation - ***Weaknesses*** - ***Resistances*** - ***Biases*** diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Marcellus Magunna.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Marcellus Magunna.md new file mode 100644 index 0000000..b35337e --- /dev/null +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Marcellus Magunna.md @@ -0,0 +1,178 @@ +--- +Level_of_Influence: 0 +Faction: +SMH_Acronym: +Tags: + - npc +--- + +# Marcellus Magunna +*Role/Description β€” e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"* + +## 🎨 Artwork +![[Marcellus Magunna.png]] +*Optional caption / alt text* + +--- + +## πŸ§‘ NPC Overview +- **Full Name:** Marcellus Magunna +- **Race / Ancestry:** +- **Gender / Pronouns:** +- **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 Warfare Lore + - DC 18 Society + - DC 18 Intimidation + - DC 20 Perception + - ***Influence Skills*** + - ***Weaknesses*** + - ***Resistances*** + - ***Biases*** + +--- + +## 🧠 Intel (auto) +```dataviewjs +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]) + ); +} +``` + +```button +name βž• Add Intel +type command +action Templater: Insert Add Intel Entry to NPC +``` + +--- + +## πŸ›οΈ Relations & Factions +- **Primary Faction:** [[Faction Name]] +- **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) diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Nuala Elidari.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Nuala Elidari.md new file mode 100644 index 0000000..b6e7338 --- /dev/null +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Nuala Elidari.md @@ -0,0 +1,178 @@ +--- +Level_of_Influence: 0 +Faction: "[[House Elidari]]" +SMH_Acronym: +Tags: + - npc +--- + +# Nuala Elidari +*Role/Description β€” e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"* + +## 🎨 Artwork +![[Nuala Elidari.png]] +*Optional caption / alt text* + +--- + +## πŸ§‘ NPC Overview +- **Full Name:** Nuala Elidari +- **Race / Ancestry:** Elf +- **Gender / Pronouns:** She/Her +- **Occupation / Role:** +- **Faction / Allegiance:** [[House Elidari]] +- **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 Accounting Lore + - DC 18 Diplomacy + - DC 18 Crafting + - DC 20 Perception + - ***Influence Skills*** + - ***Weaknesses*** + - ***Resistances*** + - ***Biases*** + +--- + +## 🧠 Intel (auto) +```dataviewjs +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]) + ); +} +``` + +```button +name βž• Add Intel +type command +action Templater: Insert Add Intel Entry to NPC +``` + +--- + +## πŸ›οΈ Relations & Factions +- **Primary Faction:** [[Faction Name]] +- **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) diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Onora Elidari.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Onora Elidari.md new file mode 100644 index 0000000..aa2549a --- /dev/null +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Onora Elidari.md @@ -0,0 +1,184 @@ +--- +Level_of_Influence: 0 +Faction: "[[House Elidari]]" +SMH_Acronym: +Tags: + - npc +--- + +# Onora Elidari +*Role/Description β€” e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"* + +## 🎨 Artwork +![[Onora Elidari.png]] +*Optional caption / alt text* + +--- + +## πŸ§‘ NPC Overview +- **Full Name:** Onora Elidari +- **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 Nobility Lore + - DC 18 Diplomacy + - DC 18 Deception + - DC 20 Perception + - ***Influence Skills*** + - DC 15 Y'athyr Lore/Elf Lore + - DC 18 Diplomacy + - DC 18 Deception + - DC 20 Crafting + - DC 20 Performance + - DC 22 Intimidation + - ***Weaknesses*** + - ***Resistances*** + - ***Biases*** + +--- + +## 🧠 Intel (auto) +```dataviewjs +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]) + ); +} +``` + +```button +name βž• Add Intel +type command +action Templater: Insert Add Intel Entry to NPC +``` + +--- + +## πŸ›οΈ Relations & Factions +- **Primary Faction:** [[House Elidari]] +- **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) diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Ronan Elidari.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Ronan Elidari.md index 3ffc262..0afefac 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Ronan Elidari.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Ronan Elidari.md @@ -159,7 +159,7 @@ action Templater: Insert Add Intel Entry to NPC ## πŸ›οΈ Relations & Factions - **Primary Faction:** [[House Elidari]] - **Allied Factions:** [[Faction A]], [[Faction B]] -- **Rival Factions:** [[House Valora]] +- **Rival Factions:** [[House Valrora]] - **Personal Enemies / Allies:** [[Faylen Valora]] --- diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Siviane Marravet.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Siviane Marravet.md new file mode 100644 index 0000000..2fe60c8 --- /dev/null +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Siviane Marravet.md @@ -0,0 +1,178 @@ +--- +Level_of_Influence: 0 +Faction: +SMH_Acronym: +Tags: + - npc +--- + +# Siviane Marravet +*Role/Description β€” e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"* + +## 🎨 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*** + - ***Weaknesses*** + - ***Resistances*** + - ***Biases*** + +--- + +## 🧠 Intel (auto) +```dataviewjs +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]) + ); +} +``` + +```button +name βž• Add Intel +type command +action Templater: Insert Add Intel Entry to NPC +``` + +--- + +## πŸ›οΈ Relations & Factions +- **Primary Faction:** [[Faction Name]] +- **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) diff --git a/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 5 - The Masquerade.md b/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 5 - The Masquerade.md index 09fb24a..b3c7da9 100644 --- a/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 5 - The Masquerade.md +++ b/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 5 - The Masquerade.md @@ -14,7 +14,7 @@ DM: Tommy 2. [[Metternich]] is going to speak with [[Lord Ellin Vaust]] to see if he can perhaps attend as his +1 2. [[Faylen Valora]] and [[Metternich]] go to speak with [[Lord Ellin Vaust]]. 1. During the course of the conversation he reveals that he knows how [[Metternich]] is in the employ of [[Faylen Valora]]. - 2. Indicates that he received multiple invitations for the Masquerade. [[Faylen Valora]] asks if he will attend if we make it interesting for him. [[Metternich]] expands attempting to entice him with the potential failure of the High Houses, and favor with [[House Valora]] going forward. + 2. Indicates that he received multiple invitations for the Masquerade. [[Faylen Valora]] asks if he will attend if we make it interesting for him. [[Metternich]] expands attempting to entice him with the potential failure of the High Houses, and favor with [[House Valrora]] going forward. 3. [[Lord Ellin Vaust]] agrees to meet with the remainder of the party the following day. 3. The rest of the party goes to talk with some servants to see if we can dig up any information on Vaust, and the High Houses 1. We find out that we're being tailed. We're bad at surprising the guy but are able to approach him eventually. diff --git a/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 7 - Meeting with Vaust.md b/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 7 - Meeting with Vaust.md index 6d9b20d..7f0e23e 100644 --- a/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 7 - Meeting with Vaust.md +++ b/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 7 - Meeting with Vaust.md @@ -21,5 +21,5 @@ DM: Tommy 1. Brief introductions play out, and he introduces himself as a merchant and proprietor of many goods in the city. 2. We share out motivations for involving ourselves in the Resistance Movement. 3. Vaust shares that he preferred the City under the guiding of House Valora pver [[House Elidari]] but, expresses some concern about those who have to close of ties with the High Houses. - 1. [[House Elidari]] finds themselves more willing to be a pawn of House Evandra, while [[House Valora]] found themselves more concerned with the operations of the city. + 1. [[House Elidari]] finds themselves more willing to be a pawn of House Evandra, while [[House Valrora]] found themselves more concerned with the operations of the city. 4. \ No newline at end of file