--- Date: 2026-04-29 Session_Name: Session 29 - Prisons, Oh My! Tags: - pf2e - session --- # Session 29 - Prisons, Oh My! > **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:** - The group has a conversation with [[Fenric Draycott]] and brings him into the loop, and nets 4 influence points. - Following that, the group heads to the Prison to establish their new base. - **Combat:** - **Outcome / Loot:** --- ## 🧠 Intel Captured (auto) ```dataviewjs const THIS = dv.current(); const sessName = THIS.file.name; const sessDate = THIS.Date ?? dv.current().file.frontmatter?.Date ?? ""; const sessLC = sessName.toLowerCase(); const pages = dv.pages("#npc or #faction").where(p => p.Intel); function matchesSessionField(sessionField) { const list = Array.isArray(sessionField) ? sessionField : [sessionField]; for (const s of list) { if (!s) continue; if (typeof s === "object" && s.path) { const base = s.path.split("/").pop().replace(/\.md$/i,""); if (base.toLowerCase() === sessLC) return true; } else { const text = String(s); if (text.includes(`[[${sessName}]]`)) return true; if (text.toLowerCase() === sessLC) return true; } } return false; } const rows = []; for (const p of pages) { for (const it of p.Intel) { let ok = false; if (it.session) ok = matchesSessionField(it.session); if (!ok && sessDate && it.date) ok = String(it.date) === String(sessDate); // fallback if (ok) { rows.push({ from: p.file.link, date: it.date ?? "", 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 ?? "") }); } } } rows.sort((a,b)=> String(b.date).localeCompare(String(a.date))); if (!rows.length) { dv.paragraph("_No intel captured for this session yet._"); } else { dv.table( ["From", "Date", "Type", "Summary", "Source", "Rel", "Cred", "Tags"], rows.map(r => [r.from, r.date, r.type, r.summary, r.source, r.rel, r.cred, r.tags]) ); } ``` --- ## 📦 Treasure & Rewards - **Items:** - **Coin:** - **XP / Milestones:** --- ## 🔜 Next Hooks / To-Dos - [ ] - [ ] - [ ]