From ec9e34e8f685f072f5529b09d47e38d7978ae197 Mon Sep 17 00:00:00 2001 From: Jason McPherson Date: Wed, 8 Oct 2025 22:44:44 -0500 Subject: [PATCH] vault commit: 2025-10-08 22:44, 16 files changed --- .../Factions/House Asase.md | 8 + .../Factions/House Gille.md | 218 ++++++++++++++++++ .../NPCs/Amity Cornwallis.md | 4 +- .../NPCs/Deidre Gille.md | 7 +- .../NPCs/Elthea Rinvale.md | 7 +- .../NPCs/Iniana Asase.md | 6 +- .../NPCs/Laughlin.md | 7 +- .../NPCs/NPC Dashboard.md | 2 +- .../NPCs/Ronan Elidari.md | 4 +- .../Statuses.md | 10 - ...ession 10 - Wined, Dined and Influenced.md | 164 +++++++++++++ .../Session 9 - Wine, Dined, Infiltrated.md | 2 +- Templates/Generate Session Summary.md | 101 ++++++++ Templates/Session Template (PF2e).md | 108 +++++++++ Templates/Test AI Generation.md | 9 + _art/npcs/Deidre Gille.png | Bin 0 -> 23401 bytes 16 files changed, 633 insertions(+), 24 deletions(-) create mode 100644 Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Gille.md delete mode 100644 Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Statuses.md create mode 100644 Dungeons and Dragons/A Legacy Forged/Session Notes/Session 10 - Wined, Dined and Influenced.md create mode 100644 Templates/Generate Session Summary.md create mode 100644 Templates/Session Template (PF2e).md create mode 100644 Templates/Test AI Generation.md create mode 100644 _art/npcs/Deidre Gille.png 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 98bf37b..5cce4dc 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: 2025-10-08 + type: interaction + summary: Says that [[House Asase]] is working to rebuild the walls of the Drenches to keep out the seaspray. + source: "[[Ronan Elidari]]" + reliability: A + credibility: 5 + tags: [] - date: 2025-10-02 type: interaction summary: 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. @@ -40,6 +47,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/House Gille.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Gille.md new file mode 100644 index 0000000..4c4c5dd --- /dev/null +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Factions/House Gille.md @@ -0,0 +1,218 @@ +--- +Reputation: 0 +Faction_Type: High House +Motto: +Ideology: +Symbol: +Colors: +Headquarters: +Territories: + - +Allies: + - +Rivals: + - +SMH_Acronym: +Intel: +Tags: + - faction +--- + +# House Gille +*One-line role/description — e.g., “Elven High House controlling Y’athir’s docks.”* + +--- + +## 🎨 Artwork +![[House Gille.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):** [[Vault/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Deidre Gille]] +- **Structure:** (council, hierarchy, cells, chapters) +- **Key Offices:** (Intelligence, Logistics, Priory, Treasury, etc.) + +--- + +## 🧰 Assets & Operations +- **Resources:** (coin, troops, mages, ships, safehouses, contacts) +- **Notable Holdings:** + - Starlight Ridge, a Vineyard outside of Y'athyr +- **Typical Ops / Tactics:** + +--- + +## 🕊️ Diplomacy & Relations +- **Allies:** `= this.Allies` +- **Rivals:** `= this.Rivals` +- **Stance toward “SMH” (their wording):** `= default(this.SMH_Acronym, "—")` + +--- + +## 🧠 Intelligence & Mentions +```button +name ➕ Add Intel +type command +action Templater: Insert Add Intel Entry to Faction +``` +```dataviewjs +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})_`); +``` +```dataviewjs +// 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`. + +--- + +## 🔗 Related NPCs (auto) +```dataview +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-08: … diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Amity Cornwallis.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Amity Cornwallis.md index 69459c9..900b3f0 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Amity Cornwallis.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Amity Cornwallis.md @@ -1,5 +1,5 @@ --- -Level_of_Influence: 0 +Level_of_Influence: 3 Faction: "[[The Archmasons]]" Tags: - npc @@ -63,7 +63,7 @@ Tags: - **Personality:** (e.g., stern, practical, loyal) - **Speech Style / Quirks:** (catchphrases, accent, tics) - **Appearance Details:** (clothing, scars, distinguishing features) - - Wore a very distinctive dress that she and her friends made to the event at [[Deidre Gille]]'s Winery. + - Wore a very distinctive dress that she and her friends made to the event at [[Vault/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Deidre Gille]]'s Winery. --- diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Deidre Gille.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Deidre Gille.md index c56e9f4..8b1748d 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Deidre Gille.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Deidre Gille.md @@ -1,5 +1,5 @@ --- -Level_of_Influence: 0 +Level_of_Influence: 2 Faction: "[[House Gille]]" SMH_Acronym: Tags: @@ -7,7 +7,7 @@ Tags: --- # Deidre Gille -*Local Vineyard Owner* +*Local Vineyard Owner, head of House Gille* ## 🎨 Artwork ![[Deidre Gille.png]] @@ -31,6 +31,9 @@ Tags: - **Level of Influence:** `= this.Level_of_Influence` (−10 to +10) - **Notes on Influence:** (what actions improve/worsen standing) - ***Discovery Skills*** + - DC 14 Wine Lore + - DC 17 Crafting + - DC 19 Perception - ***Influence Skills*** - ***Weaknesses*** - ***Resistances*** diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Elthea Rinvale.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Elthea Rinvale.md index 1800dc1..de2ff16 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Elthea Rinvale.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Elthea Rinvale.md @@ -1,9 +1,8 @@ --- -Level_of_Influence: 2 +Level_of_Influence: 4 Faction: Tags: - npc - --- # Elthea Rinvale @@ -35,6 +34,8 @@ Tags: - DC 17 Society - DC 19 Perception - ***Influence Skills*** + - DC 24 Deception + - DC 21 Intimidation - DC 19 Diplomacy - ***Weaknesses*** - Most happy when offered fresh drink/food. Reduces Influence DC by 2. @@ -53,6 +54,8 @@ Tags: ## 📖 History & Background - **Origin / Past:** + - Grew up in Glisburn - chief often brought others into the brotherhood. In the trackless they'd adopt others into the cheif's family - in the E'in they do the same. Though in the Trackless, it's alot less consensual. + - - **Known Motivations:** - **Secrets / Rumors:** - Potentially annoyed with people who constantly gawk at her being an envoy to the Trackless Courts, or otherwise disrespecting her role as a diplomat. diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Iniana Asase.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Iniana Asase.md index 877de88..8769217 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Iniana Asase.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Iniana Asase.md @@ -1,5 +1,5 @@ --- -Level_of_Influence: 1 +Level_of_Influence: 6 Faction: "[[House Asase]]" Tags: - npc @@ -38,9 +38,13 @@ Tags: - DC 21 Performance - DC 19 Diplomacy - DC 14 Labor Lore + - DC 17 Medicine - ***Weaknesses*** + - Promoting Charitable Organization or Helping the Common Folk Reduces the DC by 2. - ***Resistances*** + - - ***Biases*** + - --- diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Laughlin.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Laughlin.md index 1fdd4c8..29ed1ed 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Laughlin.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Laughlin.md @@ -1,5 +1,5 @@ --- -Level_of_Influence: 0 +Level_of_Influence: 2 Faction: Tags: - npc @@ -36,7 +36,7 @@ Tags: - DC 19 Society - ***Influence Skills*** - DC 24 Intimidation - - DC 22 Perception + - DC 22 Deception - ***Weaknesses*** - Flirting or Offering a Deal of some sort will reduce the Influence DC by 2. - ***Resistances*** @@ -59,6 +59,7 @@ Tags: - **Origin / Past:** - **Known Motivations:** - **Secrets / Rumors:** + - Has attended the last five soiree's that [[Vault/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Deidre Gille]] has hosted. --- @@ -70,7 +71,7 @@ Tags: --- ## 🗺️ Miscellaneous -- **Current Location:** +- **Current Location:** - **Important Items / Assets:** - **Plot Hooks / Ties to PCs:** - **Session Notes / Updates:** diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/NPC Dashboard.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/NPC Dashboard.md index aecc321..61045e7 100644 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/NPC Dashboard.md +++ b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/NPC Dashboard.md @@ -1,4 +1,4 @@ -# 🗂 NPC Influence Dashboard +p# 🗂 NPC Influence Dashboard > Scale: −10 … 0 … +10 (0 = Neutral; positive = more influential, negative = less) > Source: **#npc** • Excluding: **NPC Template.md** (change the name below if yours differs) 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 8bdcd30..d265458 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 @@ -1,5 +1,5 @@ --- -Level_of_Influence: -2 +Level_of_Influence: -1 Faction: "[[House Elidari]]" Tags: - npc @@ -41,7 +41,7 @@ Tags: - ***Weaknesses*** - ***Resistances*** - ***Biases*** - - Doesn't like commoners or those not working with the High Houses. -1 to Influence or Discovery + - Doesn't like commoners or those not working with the City. -1 to Influence or Discovery - Likes people who are martially minded: +2 to Influence Checks - Speaking Positively about [[House Elidari]] or the direction that the city is taking nets a +2 to Influence Checks. diff --git a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Statuses.md b/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Statuses.md deleted file mode 100644 index 0d38158..0000000 --- a/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/Statuses.md +++ /dev/null @@ -1,10 +0,0 @@ -+1 Influence with People of Highwater --1 Influence with High Class People -+2 Influence with [[Lord Ellin Vaust]] -+1 Influence with [[Iniana Asase]] --2 Influence with [[Ronan Elidari]] -+2 Influence with [[Elthea Rinvale]] -0 Influence with [[Amity Cornwallis]] -0 Influence with [[Laughlin]] -0 Influence with [[Iniana Asase]] -0 Influence with [[Deidre Gille]] \ No newline at end of file diff --git a/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 10 - Wined, Dined and Influenced.md b/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 10 - Wined, Dined and Influenced.md new file mode 100644 index 0000000..3eb0522 --- /dev/null +++ b/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 10 - Wined, Dined and Influenced.md @@ -0,0 +1,164 @@ +--- +Date: 2025-10-08 +Session_Name: Session 10 - Wined, Dined and Influenced +Tags: + - pf2e + - session +--- + + + +# Session 10 - Wined, Dined and Influenced + +> **Date:** `= this.Date` • **Name:** `= this.Session_Name` + +--- + +## 📄 Session Summary (auto) + + + +```button +name ✍️ Generate AI Summary +type command +action Templater: Insert Generate Session Summary +``` + +## 🧭 Where / When + +- **Region / Location:** + - Starlight Ridge, a Winery owned by [[Deidre Gille]] +- **In-game Date / Time:** + +- **Weather / Conditions:** + + +--- + +## 👥 PCs Present / Absent + +- **Present:** + - [[Kite]] + - [[Calen]] + - [[Faylen Valora]] + - [[Val]] + - [[Metternich]] +- **Absent:** + + +--- + +## ⭐ Highlights (feed the auto-summary) + +> Add one or more `Highlight::` lines. The button will build a summary from these. + +- Highlight:: + +- Highlight:: + +- Highlight:: + + +--- + +## 🎯 Quests & Progress + +- **Active Objectives:** + - Influence the Partygoers + +- **Progress / Resolutions:** + + +--- + +## 🗣️ NPCs Met / Factions + +- **NPCs:** [[ ]] [[ ]] [[ ]] + +- **Factions Touched:** [[ ]] [[ ]] + + +--- + +## ⚔️ Encounters + +- **Social / Exploration:** + - **Influence Encounter at the Winery** + - [[Deidre Gille]] calls for dinner, proffering everyone to sit where they like. + - [[Val]] and [[Calen]] sit down with [[Iniana Asase]] for dinner. + - Round 1 + - [[Val]] joins in conversation to also try and perform Discovery on [[Iniana Asase]] + - [[Val]] inquires as to how she got started - and it was as simple as spending time in the Drenches to see the conditions. One of her house servants had lived in the Drenches - and she would go to the Drenches to explore, and as she grew older she witness the instability. + - [[Calen]] inquires as to how to better things in the city. [[Iniana Asase]] advises the we take a more official capacity + - Specifically [[Iniana Asase]] advises that we seek licensure so that we're operating in a more official capacity. + - They converse specifically about how to best provide aid to the downtrodden and her experience in dealing with the [[Thin Wisps]] with her Soup Kitchen being in the Drenches. + - Round 2 + - [[Val]] brings up the conversation between [[Faylen Valora]] and [[Ronan Elidari]]. + - [[Calen]] and [[Val]] chat with [[Iniana Asase]] about meekness around confronting and speaking about how the situation could improve in Y'athry. + - [[Faylen Valora]] and [[Metternich]] sit with [[Ronan Elidari]], [[Amity Cornwallis]] and [[Deidre Gille]] for dinner. + - Round 1 + - [[Faylen Valora]] makes a speech thanking those who have dedicated so much time and energy to the care and well-being of the city. + - **Reactions** + - [[Deidre Gille]] offers a kind nod. + - [[Iniana Asase]] is slightly embarrased by the speech. + - [[Ronan Elidari]] thinks Faylen is making a spectacle. + - [[Laughlin]] says "Well Said!" + - [[Elthea Rinvale]] is comtemplative regarding it. + - [[Faylen Valora]] successfully gains us at least one influence with each notable at the party. + - [[Metternich]] chats with [[Deidre Gille]] + - Chats about the Vineyard, success of operations and a bit about [[Faylen Valora]]. + - [[Metternich]] also expresses an interest in learning about making wine. + - Despite his conversation with her, [[Metternich]] is unable to learn any additional information. + - Round 2 + - [[Faylen Valora]] talks with the group again and regales her experience of dealing with the Fey. Expresses the superiority of magics of Fey and Rhodesian Magics. + - [[Faylen Valora]] shares that the Alsatians have free share and exchange of knowledge. Shares the martial superiority of them in comparison to the E'in. + - [[Faylen Valora]] and [[Ronan Elidari]] bickering nets us a influence point with [[Amity Cornwallis]] + - [[Metternich]] and [[Amity Cornwallis]] sneak away after the argument is over and enjoy a quiet moment. + - They discuss the high houses being so focused on fending for themselves, and both Amity and Metternich express sentiment for "the new boss being the same as the old boss" and ruling powers viewing themselves as unassailable with their measure of power. + - [[Amity Cornwallis]] makes an argument that it's only right that those in power keep some measure for themselves. + - [[Metternich]] makes an argument that it needs to be seen that everyone survives the winter, so to speak. + - Amity counters with asking if chieftains of the trackless would've embettered themselves through the nature of their position. + - [[Amity Cornwallis]] says that all people act in their own self interest - even egalitarian systems will only last the lifetime of the person who established it. + - [[Kite]] sits with [[Elthea Rinvale]] for dinner. + - Round 1 + - [[Kite]] asks her opinion or [[Faylen Valora]]'s speech, but [[Elthea Rinvale]] doesn't say much beyond saying that [[Faylen Valora]] is well-spoken. + - They talk a bit about [[Ronan Elidari]] and [[Elthea Rinvale]] expresses some appreciation for his direct-ness. + - [[Kite]] inquires as to her presences -- and [[Elthea Rinvale]] is there for pleasure, but is in town for business. + - Y'ahtyr, serves as her homebase in the E'in, giving it's westerly location and occasional encroachments by the Trackless Territories. + - They talk a bit about Valentia and [[Kite]]'s time in Castore - and why he left. + - Per [[Kite]] this is due to feeling "roots" set in. + - They additionally talk about [[Faylen Valora]] and the rest of the part trying to bring change to the city. + - [[Kite]] inquires as to alternative employments that will serve the city at large. + - The Consortium is always looking for mercenaries to help secure the border. + - Round 2 + - [[Kite]] and [[Elthea Rinvale]] talk about Trackless vs. E'in Society. +- **Combat:** + +- **Outcome / Loot:** + + +--- + +## 🧠 Intel Captured + +--- + +## 📦 Treasure & Rewards + +- **Items:** + +- **Coin:** + +- **XP / Milestones:** + + +--- + +## 🔜 Next Hooks / To-Dos + +- [ + + +- [ ] + +- [ ] diff --git a/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 9 - Wine, Dined, Infiltrated.md b/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 9 - Wine, Dined, Infiltrated.md index b45cd12..8403b8a 100644 --- a/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 9 - Wine, Dined, Infiltrated.md +++ b/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 9 - Wine, Dined, Infiltrated.md @@ -16,7 +16,7 @@ DM: Tommy 4. [[Calen]] gets a +2 to influence for magic based traditions 1. Can use Bon Mot to reduce Influence DC 5. [[Metternich]] can use Hobnobbler to do two discoveries in a single round, can use Bon Mot to reduce the Influence DC. -2. [[Deidre Gille]] +2. [[Vault/Dungeons and Dragons/A Legacy Forged/People, Factions and Relationships/NPCs/Deidre Gille]] 1. Osal Planes Winemaker, under [[House Miiran]], at the Starlight Ridge Winery 2. Discovery Skills 1. DC 14 Wine Lore diff --git a/Templates/Generate Session Summary.md b/Templates/Generate Session Summary.md new file mode 100644 index 0000000..34a939b --- /dev/null +++ b/Templates/Generate Session Summary.md @@ -0,0 +1,101 @@ +<%* +/* PF2e AI Session Summary — FULL NOTE MODE (single-string call) + - Uses the whole note body (not just bullets) + - Strips frontmatter, code fences, and prior summaries/history + - Lets you pick Short / Standard / Detailed length +*/ + +const file = app.workspace.getActiveFile(); +if (!file) { new Notice("Open a session note first."); return; } + +/* ---------- Read & sanitize whole note ---------- */ +let body = await app.vault.read(file); + +// strip YAML frontmatter +body = body.replace(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/, ""); + +// strip prior summaries & history blocks if present +body = body.replace(/[\s\S]*?/gi, ""); +body = body.replace(/[\s\S]*?/gi, ""); + +// strip code fences & inline dataview +body = body.replace(/```[\s\S]*?```/g, ""); +body = body.replace(/`=\s*[^`]+`/g, ""); + +// normalize whitespace +body = body.replace(/\r/g, "").trim(); + +// If the note is very long, cap input (you can raise this safely) +const MAX_INPUT_CHARS = 40000; +if (body.length > MAX_INPUT_CHARS) body = body.slice(0, MAX_INPUT_CHARS); + +/* ---------- Metadata ---------- */ +const cache = app.metadataCache.getFileCache(file) || {}; +const fm = cache.frontmatter || {}; +const seshName = fm.Session_Name || tp.file.title || file.basename; +const seshDate = fm.Date || tp.date.now("YYYY-MM-DD"); + +/* ---------- Length selector ---------- */ +const lenPick = await tp.system.suggester( + ["Short (~6 bullets)","Standard (~12 bullets)","Detailed (~20 bullets)"], + ["short","standard","detailed"] +) ?? "standard"; +const bulletTarget = (lenPick === "short") ? 6 : (lenPick === "detailed") ? 20 : 12; + +/* ---------- Build single-string prompt ---------- */ +const prompt = `You are a concise Pathfinder 2e GM assistant. Summarize the FULL session note below. + +Return ONLY: +**One-line recap (bold)** +- Key beats (bulleted, chronological, ${bulletTarget} bullets max) +- NPCs & factions touched (preserve existing [[wikilinks]] verbatim if present) +- Encounters/checks/outcomes (brief) +- Loot/rewards/XP (brief) +- Next hooks/to-dos (bullets) + +DO NOT echo raw headings, “Highlight::”, or placeholder text. Cover ALL major content, not just bullet lists. + +Session: "${seshName}" on ${seshDate} + +=== NOTE START === +${body} +=== NOTE END ===`; + +/* ---------- Call AI (string-only) ---------- */ +let summary = ""; +try { + const resp = await tp.ai.chat(prompt); + summary = (typeof resp === "string") ? resp : (resp?.content ?? resp?.text ?? ""); +} catch (e) { + console.error("AI error:", e); +} + +/* ---------- Fallback if model returns empty ---------- */ +if (!summary || !summary.trim()) { + // Build a tidy, non-noisy fallback from the whole note (no headings/labels) + const lines = body + .split("\n") + .map(s => s.trim()) + .filter(s => s && !/^#{1,6}\s/.test(s)) // no markdown headings + .filter(s => !/^\*\*[^*]+:\*\*$/.test(s)) // no bold-only section labels + .filter(s => !/^Highlight::/i.test(s)) // no "Highlight::" + .filter(s => !/^Round\s+\d+/i.test(s)) // no "Round X" + .filter(s => s !== "[[ ]]"); // no empty wikilinks + + const oneLine = `**${seshName} — ${seshDate}:** ${lines[0] || "Session recap unavailable."}`; + const bullets = lines.slice(1, 1 + Math.min(20, bulletTarget + 4)).map(s => `- ${s}`); + summary = [oneLine, ...bullets].join("\n"); +} + +/* ---------- Inject between SUMMARY markers ---------- */ +const START = ""; +const END = ""; +let content = await app.vault.read(file); +const sIdx = content.indexOf(START), eIdx = content.indexOf(END); +if (sIdx === -1 || eIdx === -1 || eIdx < sIdx) { new Notice("Could not find SUMMARY markers."); return; } + +const before = content.slice(0, sIdx + START.length); +const after = content.slice(eIdx); +await app.vault.modify(file, before + "\n" + summary.trim() + "\n" + after); +new Notice("AI session summary generated."); +%> diff --git a/Templates/Session Template (PF2e).md b/Templates/Session Template (PF2e).md new file mode 100644 index 0000000..ec33447 --- /dev/null +++ b/Templates/Session Template (PF2e).md @@ -0,0 +1,108 @@ +--- +Date: <% tp.date.now("YYYY-MM-DD") %> +Session_Name: <% tp.file.title %> +Tags: [pf2e, session] +--- + +# <% tp.file.title %> + +> **Date:** `= this.Date` • **Name:** `= this.Session_Name` + +--- + +## 📄 Session Summary (auto) + +*No summary yet — click “Generate Summary” below.* + + +```button +name ✍️ Generate AI Summary +type template +action Templates/Generate AI Session Summary.md +templater true +``` + +## 🧭 Where / When + +- **Region / Location:** + +- **In-game Date / Time:** + +- **Weather / Conditions:** + + +--- + +## 👥 PCs Present / Absent + +- **Present:** + +- **Absent:** + + +--- + +## ⭐ Highlights (feed the auto-summary) + +> Add one or more `Highlight::` lines. The button will build a summary from these. + +- Highlight:: + +- Highlight:: + +- Highlight:: + + +--- + +## 🎯 Quests & Progress + +- **Active Objectives:** + +- **Progress / Resolutions:** + + +--- + +## 🗣️ NPCs Met / Factions + +- **NPCs:** [[ ]] [[ ]] [[ ]] + +- **Factions Touched:** [[ ]] [[ ]] + + +--- + +## ⚔️ Encounters + +- **Social / Exploration:** + +- **Combat:** + +- **Outcome / Loot:** + + +--- + +## 🧠 Intel Captured + +--- + +## 📦 Treasure & Rewards + +- **Items:** + +- **Coin:** + +- **XP / Milestones:** + + +--- + +## 🔜 Next Hooks / To-Dos + +- [ ] + +- [ ] + +- [ ] diff --git a/Templates/Test AI Generation.md b/Templates/Test AI Generation.md new file mode 100644 index 0000000..d11ef02 --- /dev/null +++ b/Templates/Test AI Generation.md @@ -0,0 +1,9 @@ +<%* +try { + const out = await tp.ai.chat("Say 'OK' if you can read this."); + new Notice("AI replied: " + (typeof out === "string" ? out.slice(0,60) : JSON.stringify(out).slice(0,60))); +} catch (e) { + console.error(e); + new Notice("AI call threw an error (check console)."); +} +%> diff --git a/_art/npcs/Deidre Gille.png b/_art/npcs/Deidre Gille.png new file mode 100644 index 0000000000000000000000000000000000000000..54b8ebfe3088f0cfde4a9345fdd4895eba44b99a GIT binary patch literal 23401 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 QUH||907*qoM6N<$f}gj0djJ3c literal 0 HcmV?d00001