diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Asase.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Asase.md index 5cce4dc..6c17aed 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Asase.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Asase.md @@ -14,6 +14,13 @@ Rivals: - SMH_Acronym: Intel: + - date: 2026-02-03 + type: interaction + summary: According to Freddie, those of [[House Asase]] reports to a few different houses in the iupper echelons - tha parents have connections with [[House Evandra]] which they attempt to leverage regularly. It is part of the reason that they're attempting to work around. It is also rumored that the Assase has operations in the Wells - possibly the one that is abducting all of the Halflings. The Eldest Child is more interested in his rules and books to have loyalties to anyone.' + source: "[[Freddie]]" + reliability: A + credibility: 5 + tags: [] - date: 2025-10-08 type: interaction summary: Says that [[House Asase]] is working to rebuild the walls of the Drenches to keep out the seaspray. @@ -48,6 +55,7 @@ Tags: + # House Asase *One-line role/description — e.g., “Elven High House controlling Y’athir’s docks.”* diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/Thin Wisps.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/Thin Wisps.md index e7b4b28..c96d258 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/Thin Wisps.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/Thin Wisps.md @@ -14,6 +14,13 @@ Rivals: - SMH_Acronym: Intel: + - date: 2026-02-03 + type: interaction + summary: The [[Thin Wisps]] had agreements with [[House Valrora]] when [[Ilvara Valrora]] was steward. + source: "[[Freddie]]" + reliability: A + credibility: 5 + tags: [] - date: 2025-10-02 type: interaction summary: 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]]. @@ -49,6 +56,7 @@ Tags: + # Thin Wisps *Territorial Gang of the Drenches* @@ -73,6 +81,7 @@ Tags: - **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:** - diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Freddie.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Freddie.md new file mode 100644 index 0000000..8741357 --- /dev/null +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Freddie.md @@ -0,0 +1,174 @@ +--- +Level_of_Influence: 0 +Faction: "[[Thin Wisps]]" +SMH_Acronym: +Tags: + - npc +--- + +# Freddie +**Thin Wisp Talent Acquisition"* + +## 🎨 Artwork +![[Freddy.png]] +*Optional caption / alt text* + +--- + +## 🧑 NPC Overview +- **Full Name:** +- **Race / Ancestry:** Human +- **Gender / Pronouns:** +- **Occupation / Role:** +- **Faction / Allegiance:** [[Thin Wisps]] +- **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) +```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:** + - 2026-02-03: … + +--- + +## 🔗 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/Kleadora.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Kleadora.md new file mode 100644 index 0000000..ffad154 --- /dev/null +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Kleadora.md @@ -0,0 +1,174 @@ +--- +Level_of_Influence: 0 +Faction: "[[Thin Wisps]]" +SMH_Acronym: +Tags: + - npc +--- + +# Kleadora +*Role/Description — e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"* + +## 🎨 Artwork +![[Kleadora.png]] +*Optional caption / alt text* + +--- + +## 🧑 NPC Overview +- **Full Name:** +- **Race / Ancestry:** Elf ((Grey Skinned, with Horns)) +- **Gender / Pronouns:** +- **Occupation / Role:** +- **Faction / Allegiance:** [[Thin Wisps]] +- **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) +```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:** + - 2026-02-03: … + +--- + +## 🔗 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/Saffronia.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Saffronia.md new file mode 100644 index 0000000..9e7a22d --- /dev/null +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Saffronia.md @@ -0,0 +1,174 @@ +--- +Level_of_Influence: 0 +Faction: +SMH_Acronym: +Tags: + - npc +--- + +# Saffronia +*Role/Description — e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"* + +## 🎨 Artwork +![[Saffronia.png]] +*Optional caption / alt text* + +--- + +## 🧑 NPC Overview +- **Full Name:** Saffronia +- **Race / Ancestry:** Elf ((Grey Skinned, with Horns)) +- **Gender / Pronouns:** +- **Occupation / Role:** +- **Faction / Allegiance:** [[Thin Wisps]] +- **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) +```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:** + - 2026-02-03: … + +--- + +## 🔗 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 20 - Many Plot Threads.md b/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 20 - Many Plot Threads.md index 118604d..1be95e2 100644 --- a/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 20 - Many Plot Threads.md +++ b/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 20 - Many Plot Threads.md @@ -78,7 +78,12 @@ templater true ## ⚔️ Encounters - **Social / Exploration:** - + - The group heads to their meeting with the [[Thin Wisps]] in the South Drenches. We meet them at a significantly nicer warehouse than we've seen previously. No visible guard presence, but we do notice that there are a number of other people lurking in the roof and corners watching us. + - Heading into the Warehouse: + - Most containers are waterside, but without a ship it's unclear if those are to be loaded or are waiting for other transport. + - There are four [[Thin Wisps]] on top of the crates, three are ashy, grey skinned, while the remainder is a mutton chopped human. + - [[Freddie]] also inquires as to our individual allegiances. + - [[Kite]] assures them that we do not hold them in any high esteem. - **Combat:** - **Outcome / Loot:** diff --git a/_art/npcs/Freddy.png b/_art/npcs/Freddy.png new file mode 100644 index 0000000..b44844d Binary files /dev/null and b/_art/npcs/Freddy.png differ diff --git a/_art/npcs/Kleadora.png b/_art/npcs/Kleadora.png new file mode 100644 index 0000000..0d95d94 Binary files /dev/null and b/_art/npcs/Kleadora.png differ diff --git a/_art/npcs/Saffronia.png b/_art/npcs/Saffronia.png new file mode 100644 index 0000000..9b2f2e8 Binary files /dev/null and b/_art/npcs/Saffronia.png differ